opencv中的while循环导致错误

时间:2012-01-09 19:24:31

标签: python opencv while-loop

在尝试使用opencv进行实时平面对象跟踪时,我遇到了pyopencv的“查找对象”演示。这个脚本做我想要的,除了它将一个静态图像与另一个静态图像进行比较,而我试图将静态图像与从网络摄像头抓取的当前帧进行比较。为此,我更换了这一行

scene_filename = "box_in_scene.png"

用这个

capture = cv.VideoCapture(0)
frame = Mat()
capture >> frame
imwrite("box_in_scene.png",frame)

这样可以正常工作,但是当我尝试添加一个简单的循环使其连续执行此操作时,它会经历一个循环然后停止。当我退出脚本时,我收到以下错误:

 OpenCV Error: Bad flag (parameter or structure field) (Unrecognized or unsupport
 ed array type) in cvGetMat, file M:\programming\packages\opencv\workspace\2.1\Op
 enCV-2.1.0\src\cxcore\cxarray.cpp, line 2476
 Traceback (most recent call last):
  File "find_obj.py", line 114, in <module>
    imageDescriptors = surf(image, mask, imageKeypoints)
 RuntimeError: M:\programming\packages\opencv\workspace\2.1\OpenCV-2.1.0\src\cxco
 re\cxarray.cpp:2476: error: (-206) Unrecognized or unsupported array type in fun
 ction cvGetMat

任何人都知道可能导致这种情况的原因是什么?

我正在使用的循环是

myloop = 1
while myloop == 1 :

link是完整的代码。

1 个答案:

答案 0 :(得分:0)

在仔细阅读代码后会立即想到一些事情。首先,您在循环时声明一个新的Mat()和两个新的namedWindow对象。虽然这可能会在几千次循环后导致内存错误(取决于您的计算机和操作系统),但这可能不是您的主要问题。然而,这是一种糟糕的做事方式和不良习惯。

我的第二个问题是您从摄像机扫描图像,将其保存到文件,然后将文件重新加载到内存中,以便您可以使用图像!我理解想要从相机中保存内存中的图像副本,但是你已经将它存储在内存中,那么为什么要重新加载呢?如果你在Windows上,这可能是你的坏矩阵的来源,因为已知VC ++ 10库有一些imwrite和imread的问题。 [编辑]我知道你正在使用python,但你的程序报告来自.cpp文件的错误,这意味着python导入实际上链接到某处的c ++库[/ EDIT]

尝试在循环中删除imwrite和imread调用,并直接使用相机中的图像。如果您的代码在此之后有效,那么您就会知道问题出在哪里。让我们知道它是怎么回事。