OpenCV / 数组应为CvMat或IplImage / 释放捕获对象
编辑: 数组应该是 CvMat 或 IplImage
这个信息并不是针对我遇到的问题的错误提示,只是我得到的最相关的错误信息。
我正在尝试用 OpenCV 制作一个 *.exe 的应用程序。
我使用的是 Python 2.6 和 OpenCV 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
对象。