代码之家  ›  专栏  ›  技术社区  ›  PuercoPop

OpenCV 2.1 Python绑定分段

  •  2
  • PuercoPop  · 技术社区  · 14 年前

    你好,我有一个问题,当分组在我自己的函数OpenCV的函数和得到分段错误。

    即使代码这么简单

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

    如果我在函数外调用相同的指令,一切正常。我对可能发生的事情有一个想法,但对python了解不够,无法阻止它。我认为这个对象被GC释放了。

    2 回复  |  直到 14 年前
        1
  •  2
  •   Jesus    14 年前

    要防止捕获对象被垃圾收集,请在变量中保留对它的引用,直到不再需要图像为止。在代码中:“capture”变量不能是函数的局部变量,而是函数外部的变量。或者,如果希望在函数内对其进行初始化,请将其与捕获的图像一起返回,并在调用函数后将其存储在变量中:

    
    def acquire_imagen():
      capture = cv.CaptureFromCAM( 0 )
      img = cv.QueryFrame( capture )
      return capture, img
    capture, img = acquire_image()
    print img[0,0]
    
    
        2
  •  1
  •   Jesus    14 年前

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