尝试使用CV2从网络摄像头捕获视频时出错

2024-04-18 13:10:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试制作一个应用程序,利用网络摄像头获取视频。但是当我运行程序时,网络摄像头没有启动,我也没有看到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有问题。我应该怎么做来解决这个问题


Tags: theimport程序网络src应用程序cv2frame
3条回答

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

所以我遇到了和你一样的问题,答案是。。你的相机坏了

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

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

我终于解决了我的WIFI问题是的!!! 然后我重新安装我的驱动程序,包括视频,但 我的猫抓伤了视频的原始安装盘,所以我让windows安装了一个通用驱动程序

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

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

cv2.error:OpenCV(4.3.0)C:\projects\opencvpython\OpenCV\modules\imgproc\src\color.cpp:182:error:(-215:断言失败)_函数“cv::cvtColor”中的src.empty()

我查看了所有的论坛,测试了我可以安装其他版本的所有东西,以及所有耗时的“魔术”(但你学到了很多这是好的一面) 完全绝望的我记得我没有安装原来的驱动程序 答对 了 我去商店是因为这个oem产品没有internet地址来加载驱动程序GRGRRGR 现在一切都很好 小提示 使用通用驱动程序,我经常被迫断开并重新连接我的相机与此测试 https://www.onlinemictest.com/webcam-test/ (不确定该场地是否干净,使用风险自负) 因此,安装一个适合您的相机的驱动程序,并停止怀疑opencv和您的安装 我的五美分

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

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循环之间可能存在计时问题。我遇到了完全相同的问题,被难住了

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

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

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

我在想,在它能够立即启动之前,相机必须启动并被程序读取一次

相关问题 更多 >