PyCharm运行OpenCV调用摄像头报cv::cvtColor!_src.empty()错误如何解决
报错原因
- 核心报错
!_src.empty()是因为没有成功读取到摄像头画面,传入cv2.imshow的img为空值。触发原因绝大多数是cv2.VideoCapture传入的摄像头设备号错误,Windows设备默认自带摄像头的编号是0,代码中写1会在没有外接第二摄像头的情况下读取失败。 - 代码逻辑存在缺陷:没有对
cap.read()返回的成功状态success做校验,读取失败后仍直接传递空图像给显示接口,直接触发报错。 - 伴随的警告是Windows平台下OpenCV默认调用MSMF视频驱动的兼容提示,不影响核心功能,可通过参数消除。
- 额外的逻辑错误:退出条件中错误使用了逻辑运算符
and,应该用位运算符&匹配按键码,会导致按q无法正常退出程序。
修复方案
- 修改摄像头初始化参数,替换设备号为默认值0,同时添加驱动适配参数消除警告:
将原代码的cap = cv2.VideoCapture(1)
替换为cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)
如果确认使用外接第二摄像头,可依次尝试设备号1、2直到能正常读取画面。 - 补充读取校验、修复退出逻辑、追加资源释放代码,修改后的完整循环逻辑如下:
while True: success, img = cap.read() # 仅读取成功时执行显示逻辑 if success: cv2.imshow("Result", img) # 修复位运算判断逻辑 if cv2.waitKey(1) & 0xFF == ord('q'): break # 释放摄像头资源、销毁所有窗口 cap.release() cv2.destroyAllWindows()
- 如修改后仍无法读取,检查Windows系统摄像头权限:进入「设置→隐私和安全性→摄像头」,打开「允许桌面应用访问摄像头」开关,确认PyCharm的访问权限未被限制。
内容的提问来源于stack exchange,提问作者six dogs
相关产品推荐
相关产品推荐

