2010-09-11 11 views
2

Bonjour J'ai un problème lorsque je regroupe les fonctions d'OpenCV dans mes propres fonctions et que j'obtiens une erreur de segmentation.OpenCV 2.1 Liaisons Python Segfaulting

Même avec le code aussi simple que cela

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

Si j'appelle les mêmes instructions en dehors de la fonction, tout est ok. J'ai une idée de ce qui peut arriver, mais pas assez de connaissances sur Python pour l'empêcher. Je pense que l'objet est libéré par le GC.

Répondre

2

Pour éviter que l'objet de capture ne soit collecté dans la mémoire, gardez une référence dans une variable jusqu'à ce que vous n'ayez plus besoin des images. Dans votre code: la variable "capture" ne peut pas être une variable locale de la fonction, mais une variable en dehors de la fonction. Ou, si vous voulez qu'il soit initialisé dans la fonction, retournez-le avec l'image capturée, et le stocker dans une variable après l'appel à la fonction:

 

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

Le problème semble être que l'objet de capture ne peut pas être libéré avant d'accéder aux images capturées. Ne laissez pas l'objet "capture" être libéré jusqu'à ce que l'image n'est plus accessible dans votre programme.

+0

Mais comment puis-je prévenir le GC collectant? – PuercoPop