2010-09-11 59 views
2

您好,我在将OpenCV的函数分组到我自己的函数中并出现分段错误时遇到问题。OpenCV 2.1 Python绑定Segfaulting

即使有代码,因为这

def acquire_imagen(): 
    capture = cv.CaptureFromCAM(0) 
    img = cv.QueryFrame(capture) 
    return img 
img = acquire_image() 
print img[0,0] 

一样简单。如果我把相同的指令之外的功能一切正常。我对可能发生的事情有一个想法,但没有足够的关于python的知识来防止它发生。我认为这个对象正在被GC释放。

回答

2

为了防止捕获对象被垃圾收集,请在变量中保留对其的引用,直到不再需要该图像为止。在你的代码中:“capture”变量不能是函数的局部变量,而是函数外的变量。或者,如果你想让它里面的函数初始化,随着拍摄的图像返回它,并将其存储在一个变量调用该函数后:

 

def acquire_imagen(): 
    capture = cv.CaptureFromCAM(0) 
    img = cv.QueryFrame(capture) 
    return capture, img 
capture, img = acquire_image() 
print img[0,0] 
 
1

问题似乎是在获取从中捕获的图像之前无法释放捕获对象。不要让“捕捉”对象被释放,直到程序中不再访问该图像。

+0

但我怎么阻止GC回收呢? – PuercoPop 2010-11-05 10:06:49