尝试使用CV2从WebCam捕获视频时出错

时间:2020-07-07 23:43:48

标签: python opencv webcam

我正在尝试制作一个使用网络摄像头来获取视频的应用程序。但是,当我运行该程序时,网络摄像头无法启动,并且看不到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有问题。我该怎么办才能解决问题?

3 个答案:

答案 0 :(得分:0)

似乎没有可以转换为灰度的帧。 怎么样呢?

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()

答案 1 :(得分:0)

您使用的程序是视频的“世界,你好”或闪烁的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:错误:(-215:断言失败)!_src.empty( )在功能'cv :: cvtColor'

我在所有论坛上测试了我可以安装其他版本的所有东西以及所有“魔术”所花费的时间(但是您学到了很多,这是它的优点) 完全绝望了,我记得我没有安装原始驱动程序 答对了 我去商店是因为此OEM产品没有Internet地址来加载驱动程序GRGRGRGRgrrgrgrgr 现在一切正常 小提示 使用通用驱动程序,我经常不得不断开相机,然后通过此测试重新连接相机 https://www.onlinemictest.com/webcam-test/ (不确定此网站是否干净,使用时自担风险) 因此,请安装适用于您的相机的驱动程序,然后停止对opencv和安装的怀疑 我的5美分。

答案 2 :(得分:0)

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

我什至以前有一个有效的代码(在另一个项目中)。因此,我尝试在进入while循环之前添加额外的读取内容。

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

这有效。然后,我想看看是否确实可以解决此问题。我在while循环之前删除了cap.read(),然后重新运行了代码。现在它继续工作。

我认为相机必须立即启动并被程序读取一次。