我正在尝试在python opencv-2.4.3中编码,它给我一个错误如下
Traceback (most recent call last):
File "/home/OpenCV-2.4.3/cam_try.py", line 6, in <module>
cv2.imshow('video test',im)
error: /home/OpenCV-2.4.3/modules/core/src/array.cpp:2482: error: (-206) Unrecognized or unsupported array type in function cvGetMat
我不明白这是什么意思,有人可以帮助我吗? 三江源。
答案 0 :(得分:6)
错误讯息的相关摘要为Unrecognized or unsupported array type in function cvGetMat
。 cvGetMat()
函数将数组转换为Mat
。 Mat
是OpenCV在C / C ++世界中使用的矩阵数据类型(注意:您正在使用的Python OpenCV接口使用Numpy数组,然后在后台将其转换为Mat
数组) 。考虑到这一背景,问题似乎是您传递给im
的数组cv2.imshow()
形成不良。两个想法:
这可能是由于您的网络摄像头上的奇怪行为造成的......在某些相机上,会不时返回空帧。在将im
数组传递给imshow()
之前,请尝试确保它不为空。
如果每个框架上发生错误,则取消您正在执行的某些处理,并在从网络摄像头抓取框架后立即致电cv2.imshow()
。如果仍然不起作用,那么你就会知道它是你网络摄像头的问题。否则,逐行添加您的处理,直到您找出问题为止。例如,从这开始:
while True:
# Grab frame from webcam
retVal, image = capture.read(); # note: ignore retVal
# faces = cascade.detectMultiScale(image, scaleFactor=1.2, minNeighbors=2, minSize=(100,100),flags=cv.CV_HAAR_DO_CANNY_PRUNING);
# Draw rectangles on image, and then show it
# for (x,y,w,h) in faces:
# cv2.rectangle(image, (x,y), (x+w,y+h), 255)
cv2.imshow("Video", image)
i += 1;
来源:Related Question: OpenCV C++ Video Capture does not seem to work
答案 1 :(得分:4)
我遇到了同样的错误,经过大约一个小时的搜索错误后,我发现图像的路径定义不正确。它解决了我的问题,可能会解决你的问题。
答案 2 :(得分:1)
我通过使用BGR图片解决了这个问题。我的相机中的那个是默认的YUV!
答案 3 :(得分:0)
我在Windows中使用Opencv 2.3.1和Python 2.7.2,所以,我遇到了同样的问题,我解决了它粘贴以下DLL文件:opencv_ffmpeg.dll和opencv_ffmpeg_64.dll在Python的安装文件夹中。也许它可以帮助你在Ubuntu中使用类似的解决方案。
答案 4 :(得分:0)
对我来说,就像Gab Hum一样,我将opencv_ffmpeg245.dll复制到我的python代码文件夹中。然后就行了。
答案 5 :(得分:0)
通过打印来检查图像阵列(或NpArray),是否尝试一次通过图像阵列而不是一次通过每个图像。
单个图像数组如下所示:
[[[[76 85 103] ... [76 85 103]],...]
行包围每一列,每个矩阵(像素)不包含行,每个图像都由矩阵(像素)组成。
答案 6 :(得分:0)
进行健全性检查总是好的,以确保您的相机正常工作。 就我而言,我的相机是
raspistill -o test.jpg