【问题标题】:Unrecognized or unsupported array type in function cvGetMat in python opencvpython opencv中函数cvGetMat中无法识别或不支持的数组类型
【发布时间】:2021-07-21 17:58:09
【问题描述】:

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

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

【问题讨论】:

  • 启动网络摄像头程序后是否立即出现错误?还是在成功返回几帧后出现?

标签: python opencv


【解决方案1】:

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

  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;
    

来源:Related Question: OpenCV C++ Video Capture does not seem to work

【讨论】:

  • 非常感谢,我急切地等待您的回复。是的,cv2.imshow 有问题。当我尝试打印图像时,它是无。是网络摄像头的问题吗?但它适用于我的旧版本的简单视频捕获代码。当我尝试单独打印时,它显示>>>捕获>>>级联>>>打印图像。我该怎么办??
  • 您在哪里打印图像?如果在 capture.read() 之后为 None,则检查可能包含错误代码的 retVal 变量。否则告诉我你在哪里打印。
  • 我使用 python Idle 作为编辑器,当我打印时它给出为 none 和 retVal 为 False。
  • 如果您在致电capture.read() 后立即打印retVal 和图像,那么您的网络摄像头可能有问题。文档说,当“没有抓取任何帧(例如当相机断开连接,或者视频文件中没有更多帧时)”时,retVal 为 False。您的相机是否可以在其他 cv2 v2.4.3 脚本中使用?
  • 我已经在我的桌面上重新安装了 ubuntu 11.10 并安装了 opencv-2.4.3,并且想再次重新启动,这样我就可以确保不会丢失任何 opencv 库。安装opencv-2.4.3是一个正确的决定吗,我是新来处理的,对于愚蠢的问题很抱歉,但是您使用的是2.4.3,所以只想问一下,安装和处理时是否会导致任何问题?
【解决方案2】:

我遇到了同样的错误,在搜索错误大约一个小时后,我发现图像的路径定义不正确。它解决了我的问题,也许它会解决你的问题。

【讨论】:

    【解决方案3】:

    我通过使用 BGR 图片解决了这个问题。我的摄像头默认是 YUYV!

    【讨论】:

      【解决方案4】:

      我在 Windows 中使用 Opencv 2.3.1 和 Python 2.7.2 工作,所以,我遇到了同样的问题,我解决了它在 Python 的安装文件夹中粘贴以下 DLL 文件:opencv_ffmpeg.dll 和 opencv_ffmpeg_64.dll。也许它可以帮助您在 Ubuntu 中使用类似的解决方案。

      【讨论】:

        【解决方案5】:

        对我来说,就像 Gab Hum 所做的那样,我将 opencv_ffmpeg245.dll 复制到了我的 python 代码文件夹中。然后就可以了。

        【讨论】:

          【解决方案6】:

          检查您的图像数组(或 NpArray),(通过打印)您是否尝试一次传递一组图像,而不是一次传递每张图像。

          单个图像数组看起来像:

          [[[ 76 85 103] ... [ 76 85 103]],... ]

          行包含每一列,每个矩阵(像素)包含行数,每个图像包含矩阵(像素)。

          【讨论】:

            【解决方案7】:

            进行健全性检查总是好的,以确保您的相机正常工作。 就我而言,我的相机是

            raspistill -o test.jpg

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2020-06-24
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-10-30
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多