python opencv中函数cvGetMat中无法识别或不支持的数组类型

时间:2013-01-04 10:12:54

标签: python opencv

我正在尝试在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

我不明白这是什么意思,有人可以帮助我吗? 三江源。

7 个答案:

答案 0 :(得分:6)

错误讯息的相关摘要为Unrecognized or unsupported array type in function cvGetMatcvGetMat()函数将数组转换为MatMat是OpenCV在C / C ++世界中使用的矩阵数据类型(注意:您正在使用的Python OpenCV接口使用Numpy数组,然后在后台将其转换为Mat数组) 。考虑到这一背景,问题似乎是您传递给im的数组cv2.imshow()形成不良。两个想法:

  1. 这可能是由于您的网络摄像头上的奇怪行为造成的......在某些相机上,会不时返回空帧。在将im数组传递给imshow()之前,请尝试确保它不为空。

  2. 如果每个框架上发生错误,则取消您正在执行的某些处理,并在从网络摄像头抓取框架后立即致电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;
    
  3. 来源: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