【问题标题】:while-loop in opencv causing erroropencv中的while循环导致错误
【发布时间】:2012-01-09 19:24:31
【问题描述】:

在尝试使用 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 是完整的代码。

【问题讨论】:

  • 能否将while循环添加到问题中?只是看看可能发生了什么变化
  • 你能贴出你捕获帧的循环代码的开头并尝试循环吗
  • 你的例子根本无法理解。请重写,添加整个循环,里面有相关代码,循环之前有相关代码。
  • @Snesticle: vasile 所说的可能不是你想听到的,但他的陈述很明确,一点也没有不必要的刻薄和贬低。不那么刻薄和贬低只会导致他的评论更长,更模糊。此外,您显然在简化代码以使其易于理解并确定错误原因方面付出了很少的努力。无论如何,恭喜您解决了您的问题。
  • @Snesticle:您能否将您的答案粘贴到问题中并接受它?否则,此问题将继续显示在“未回答”标签中。

标签: python opencv while-loop


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2020-08-01
    • 1970-01-01
    • 2010-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多