2010-09-11 22 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