OpenCV / 数组应为CvMat或IplImage / 释放捕获对象

1 投票
1 回答
3120 浏览
提问于 2025-04-16 12:39

编辑: 数组应该是 CvMat 或 IplImage 这个信息并不是针对我遇到的问题的错误提示,只是我得到的最相关的错误信息。


我正在尝试用 OpenCV 制作一个 *.exe 的应用程序。

我使用的是 Python 2.6OpenCV 2.1

我可以运行这个 *.exe 的一部分,我有一个菜单可以选择处理来自两个不同来源的图片:我的网络摄像头和一张静态图片。静态图片的部分可以正常工作,但当我选择网络摄像头时,输出是这样的:

OpenCV Error: Bad argument (Array should be CvMat or IplImage) in unknown function, file ..\..\..\..\ocv\opencv\src\cxcore\cxarray.cpp,
 line 1233
Traceback (most recent call last):
  File "_ctypes/callbacks.c", line 295, in 'calling callback function'
  File "game_ar\build\pyi.win32\game_ar\outPYZ1.pyz/pyglet.window.win32", line 849, in _wnd_proc
  File "game_ar\build\pyi.win32\game_ar\outPYZ1.pyz/pyglet.window.win32", line 918, in _event_key
  File "game_ar\build\pyi.win32\game_ar\outPYZ1.pyz/pyglet.window", line 1219, in dispatch_event
  File "game_ar\build\pyi.win32\game_ar\outPYZ1.pyz/pyglet.event", line 340, in dispatch_event
  File "", line 502, in on_key_press
  File "", line 461, in dostart
  File "", line 482, in getpoints
  File "D:\Prog\Python\AugmentedR\src\pyar.py", line 40, in get_points
    pilimage = Image.fromstring("RGB", cv.GetSize(image), image.tostring())
cv.error: Array should be CvMat or IplImage
Traceback (most recent call last):
  File "", line 616, in 
  File "game_ar\build\pyi.win32\game_ar\outPYZ1.pyz/pyglet.app", line 264, in run
  File "game_ar\build\pyi.win32\game_ar\outPYZ1.pyz/pyglet.app.win32", line 63, in run
  File "game_ar\build\pyi.win32\game_ar\outPYZ1.pyz/pyglet.app.win32", line 84, in _timer_func
  File "game_ar\build\pyi.win32\game_ar\outPYZ1.pyz/pyglet.app", line 193, in idle
  File "game_ar\build\pyi.win32\game_ar\outPYZ1.pyz/pyglet.window", line 1219, in dispatch_event
  File "game_ar\build\pyi.win32\game_ar\outPYZ1.pyz/pyglet.event", line 340, in dispatch_event
  File "", line 546, in on_draw
AttributeError: Game instance has no attribute 'bg'

这是我的 pyar.py 文件。

用 py2exe 构建 *.exe 时得到了这个输出:

The following modules appear to be missing
['ICCProfile', '_imaging_gif', '_scproxy']

我不明白,使用我的源文件是可以正常工作的。我尝试用 py2exe 和 pyinstaller 打包我的应用程序,但输出结果是一样的。

我猜这个 *.exe 可能缺少什么东西,但我不知道缺少什么,也不知道该怎么调试。

1 个回答

4

这和打包工具没有关系。

问题在于我没有关闭摄像头的捕捉,实际上我的应用程序有几个进程在后台运行。

文档里提到的 ReleaseCapture 这个函数,似乎在 Python 的接口里没有,调用:

del(self.cam)

就解决了问题,self.cam 是我的 CvCapture 对象。

撰写回答