我正在尝试制作一个使用网络摄像头来获取视频的应用程序。但是,当我运行该程序时,网络摄像头无法启动,并且看不到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有问题。我该怎么办才能解决问题?
答案 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()
,然后重新运行了代码。现在它继续工作。
我认为相机必须立即启动并被程序读取一次。