【问题标题】:Error on trying to use CV2 for capturing video from WebCam尝试使用 CV2 从 WebCam 捕获视频时出错
【发布时间】:2020-10-28 07:29:27
【问题描述】:

我正在尝试制作一个使用网络摄像头获取视频的应用程序。但是当我运行程序时,网络摄像头没有启动,而且我没有看到 cv2 窗口打开。我什至尝试制作一个简单的网络摄像头程序,但它也不起作用:

import numpy as np
import cv2

cap = cv2.VideoCapture(0)

while(True):
    # Capture frame-by-frame
    ret, frame = cap.read()

    # Our operations on the frame come here
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # Display the resulting frame
    cv2.imshow('frame',gray)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()

我收到以下错误:

[ WARN:0] global C:\projects\opencv-python\opencv\modules\videoio\src\cap_msmf.cpp (436) `anonymous-namespace'::SourceReaderCB::~SourceReaderCB terminating async callback
Traceback (most recent call last):
  File "test.py", line 11, in <module>
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.error: OpenCV(4.3.0) C:\projects\opencv-python\opencv\modules\imgproc\src\color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'

我的网络摄像头在其他应用程序中运行良好。只有 cv2 有问题。我应该怎么做才能解决这个问题?

【问题讨论】:

    标签: python opencv webcam


    【解决方案1】:

    似乎没有帧​​可以转换为灰度。 试试这个怎么样。

    import numpy as np
    import cv2
    
    #change to your video path
    cap = cv2.VideoCapture("D:\start.mp4")
    
    while(cap.isOpened()):
        # Capture frame-by-frame
        ret, frame = cap.read()
    
        if (ret!=True):
             break
    
        # Our operations on the frame come here
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    
        # Display the resulting frame
        cv2.imshow('frame',gray)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    
    # When everything done, release the capture
    cap.release()
    cv2.destroyAllWindows()
    

    【讨论】:

    • 它仍然没有启动网络摄像头。我之前收到警告,程序终止
    • 它不会进入 while 循环。 cap.isOpened() 返回错误
    • 啊,你应该像这样把视频路径放在第 4 行 cap = cv2.VideoCapture("D:\start.mp4")
    • 但我没有读取视频文件,我正在尝试捕获网络摄像头视频
    【解决方案2】:

    您使用的程序是视频的“hello the world”或闪烁的 led 或 arduino。

    所以我遇到了和你一样的问题,答案是..你的相机驱动不好。

    当我买了我非常昂贵的相机(20 美元)时,我安装了驱动程序,并且在 opencv 上一切正常。

    我最近用我的 WIFI 做了噩梦,我开始卸载驱动程序。

    我终于解决了我的WIFI问题 YES !!! 然后我重新安装我的驱动程序包括视频但是 我的猫把视频的原安装盘刮掉了,好吧,我让windows安装通用驱动。

    一切看起来都很好,声音和图像,都很好(20 美元的相机你还要求什么)

    一段时间后我回到 openCV,然后...同样的错误

    cv2.error: OpenCV(4.3.0) C:\projects\opencv-python\opencv\modules\imgproc\src\color.cpp:182: error: (-215:Assertion failed) !_src.empty( ) 在函数'cv::cvtColor'中

    我查看所有论坛测试我可以安装其他版本的所有东西,以及所有耗时的“魔术技巧”(但你学到了很多,这是它的好处) 完全绝望我记得我没有安装原始驱动程序 答对了 我去商店是因为这个 oem 产品没有互联网地址来加载驱动程序 GRGRGRGRgrrgrgrgr 现在一切都很完美 小贴士 使用通用驱动程序,我经常不得不通过这个测试断开并重新连接我的相机 https://www.onlinemictest.com/webcam-test/ (不确定这个网站是否干净,使用它需要自担风险) 所以安装一个适合你的相机的驱动程序,不要怀疑 opencv 和你的安装 我的 5 美分。

    【讨论】:

    • 但我的相机在其他应用程序上也能正常工作。那么为什么只有 OpenCV 有问题呢?相反,OpenCV 几个月前也在工作,但是当我格式化我的笔记本电脑并重新安装它时,现在它出现了问题
    • 我的相机也可以使用通用驱动程序,但不够好,您的相机有什么驱动程序?我敢打赌,您有一个通用驱动程序而不是特定于您的相机的驱动程序如果像我一样,您只是将它用于联系朋友,您不在乎某些功能是否不起作用,男孩 openCV 确实在乎!!!
    【解决方案3】:

    在相机启动和代码进入 while 循环之间似乎存在时间问题。我遇到了完全相同的问题并被难住了。

    我什至有一个可以工作的以前的代码(在不同的项目中)。所以我尝试在进入 while 循环之前添加额外的读取。

    ret, frame = cap.read()
    white True:
        ret, frame = cap.read()
        # rest of the code
    

    这行得通。然后我想看看这是否确实解决了它。我在 while 循环之前删除了 cap.read() 并重新运行了代码。现在它继续工作。

    我正在考虑让相机启动并被程序读取一次,然后才能立即启动。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-07
      • 1970-01-01
      • 2019-10-27
      • 1970-01-01
      • 2021-07-15
      • 1970-01-01
      • 2020-07-03
      • 2023-03-25
      相关资源
      最近更新 更多