while循环在opencv导致错误

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是在它的全部代码。

+2

请问您可以添加while循环的问题?只是为了看看可能发生了什么变化 – 2012-01-09 19:47:13

+0

你可以发布循环代码的开头,在那里捕获框架并尝试循环它 – SB26 2012-01-09 21:57:02

+0

你的例子根本无法理解。请重新编写它,在整个循环中添加相关代码,并在循环之前添加相关代码。 – Sam 2012-01-10 06:54:16

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

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

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