while循环在opencv导致错误
问题描述:
虽然试图用opencv做实时平面对象跟踪,但我遇到了pyopencv的“查找对象”演示。这个脚本做了我想要的,但它将一个静态图像与另一个静态图像进行比较,然而我试图将静态图像与从网络摄像头抓取的当前帧进行比较。为此我换成这行while循环在opencv导致错误
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是在它的全部代码。
答
在仔细阅读代码后,您会立即想到几件事情。首先,你正在声明一个新的Mat(),并且每次循环时都会声明两个新的namedWindow对象。虽然这会在数千次循环之后导致内存错误(取决于您的计算机和操作系统),但这可能不是您的主要问题。然而,这是一种做事和做坏事的可怕方式。
我的第二个问题是您从您的摄像机扫描图像,将其保存到文件,然后将文件重新加载到内存中,以便您可以使用该图像!我知道想要从相机中将图像的副本保存在内存中,但您已将其存储在内存中,为何要重新加载它?如果你在windows上,这可能是你的坏矩阵的源头,因为VC++ 10库已知有一些imwrite和imread的问题。 [编辑]我知道你使用的是python,但是你的程序报告了.cpp文件中的错误,这意味着python导入实际上与某处的C++库相链接[/编辑]
尝试删除imwrite和imread呼叫您的循环,并直接从相机使用图像。如果你的代码在此之后有效,那么你就会知道你的问题在哪里。让我们知道怎么回事。
请问您可以添加while循环的问题?只是为了看看可能发生了什么变化 – 2012-01-09 19:47:13
你可以发布循环代码的开头,在那里捕获框架并尝试循环它 – SB26 2012-01-09 21:57:02
你的例子根本无法理解。请重新编写它,在整个循环中添加相关代码,并在循环之前添加相关代码。 – Sam 2012-01-10 06:54:16