报错信息:

Traceback (most recent call last):
  File "G:\Python图像识别相关学习视频\人体姿势检测.py", line 32, in <module>
    cv2.imshow('image_title',img)
cv2.error: OpenCV(4.6.0) D:\a\opencv-python\opencv-python\opencv\modules\highgui\src\window.cpp:967: error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'cv::imshow'

 软件环境:

Python 3.8.10

opencv 4.6.0.66

硬件配置:

Intel Core i3-6100 @ 3.7GHz

内存8G

集显

USB摄像头

问题代码:

import cv2
cap = cv2.VideoCapture(0) # 读摄像头# 设置图像大小640*480
cap.set(3,640)
cap.set(4,480)while cap.isOpened():ret, img = cap.read()cv2.imshow('image_title',img)if cv2.waitKey(50) & 0xFF == ord('q'):cap.release()break
cv2.destroyAllWindows()

问题排查:

从报错信息来看,它提示size.width>0 && size.height>0 in function 'cv::imshow',可以看出,是imshow这个函数出问题,这个是显示图像的函数,既然出错,一般问题在于输入参数有问题,再往前看,size.width>0 && size.height>0,可以推测,是输入的图像数据宽度或高度为0,即变量img为空。

因此,检查变量img的来源,img来自这句:

ret, img = cap.read()

ret表示是否读取成功,若成功则返回True,若失败则返回False。img即为读取到的图像数据。既然img为空,说明此时ret应该是False,即读取图像数据失败。

我们再接着往上追溯,看看cap来自哪里,cap是一个VideoCapture对象,来自这句话:

cap = cv2.VideoCapture(0)

这里cv2.VideoCapture(0),其中参数0表示USB摄像头ID是0。接下来你可以试试cap.isOpened()是否返回True,如果不是,说明你的USB摄像头ID不是0,你可以换其他数字1、2、3等试试,直到cap.isOpened()返回True。

我这边cap.isOpened()返回True,说明此时摄像头已被正常打开。

那么问题来了,既然USB摄像头正常打开了(我的USB摄像头工作指示灯也亮起了),那为什么读取不到图像数据呢?

我检查了Python环境、USB摄像头硬件、代码语句等,折腾了好久,也百度了一大堆,依旧无头绪,硬件没问题,环境也没问题,网络上大家代码也写的大同小异……

问题解决:

最终问题还是解决了,于是,就有了本篇博客,给各位玩图像识别的朋友避避坑!

问题就出在这句话:

cap = cv2.VideoCapture(0)

我们在创建cap这个对象时,只指定摄像头ID,没有指定第二个参数apiPreference,当第二个参数没指定时,它默认是cv2.CAP_ANY,因此导致无法正确读取USB摄像头数据。(早期版本的OpenCV也许可以,毕竟网络上的参考代码,大部分都是不指定第二个参数的。另外,笔记本自带的摄像头应该也可以不指定第二个参数。)

我添加第二个参数为cv2.CAP_DSHOW,解决问题,更改后的语句如下:

cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)

已经可以正常读取USB摄像头数据了。

至此问题解决!

再来一遍修改后的完整代码:

import cv2
cap = cv2.VideoCapture(0,cv2.CAP_DSHOW) # 读摄像头# 设置图像大小640*480
cap.set(3,640)
cap.set(4,480)while cap.isOpened():ret, img = cap.read()cv2.imshow('image_title',img)if cv2.waitKey(50) & 0xFF == ord('q'):cap.release()break
cv2.destroyAllWindows()

希望可以帮助到各位遇到同样问题的小可爱们~

也欢迎到我小破站留言交流:space.bilibili.com/14596169

Python OpenCV 读取USB摄像头报错问题解决相关推荐

  1. python opencv 读取USB摄像头的像素问题

    问题描述 每次调用capture读取video的时候,还回的像素都是640x480,不管是笔记本的摄像头还是USB摄像头,明明我的摄像头是支持130万读取的功能的呀. 问题分析 一番查找,关于用ope ...

  2. 大疆妙算Manifold刷机换源,cuda,opencv,qt配置以及实现opencv读取usb摄像头,qmake nvcc交叉编译

    大疆妙算Manifold刷机换源,cuda,opencv,qt配置以及实现opencv读取usb摄像头,qmake nvcc交叉编译 一.刷机 1.解压安装包 2.制作镜像 3.然后按照妙算说明书进入 ...

  3. Python——CSV读取大文件报错_csv.Error: field larger than field limit

    Python--CSV读取大文件报错_csv.Error: field larger than field limit 使用Python读取较大的csv文件时,可能出现大字段,导致超过字段默认限制,从 ...

  4. OpenCV 打开USB摄像头帧率低问题解决

    采用OpenCV对USB摄像头进行视频图像抓取时,如果图像帧抓取帧率低,可采用以下方式提高帧率. cv::VideoCapture camera_capture; camera_capture.ope ...

  5. OpenCV读取显示图片报错size.width>0

    OpenCV读取图片时 error: (-215:Assertion failed) size.width>0 && size.height>0 in function ' ...

  6. opencv读取usb摄像头_2020 款 11寸 iPad Pro 深度摄像头 RGBD 视频流可视化

    上个月,客户帮我租了一台 2020 款 11寸 iPad Pro,为了在 iPad 上实现一个室内三维重建的APP.以我的方式,我需要先离线在主机上实现一个三维重建的程序. 为了给客户节约成本,我找到 ...

  7. python使用微信库wxpy报错问题解决

    今天安装python第三方微信库wxpy,网上吹的神乎其神,按耐不住好奇的心情,准备测试下相关功能. 安装第三库 pip install -U wxpy -i "https://pypi.d ...

  8. python opencv以MJPG读取usb摄像头

    python下使用opencv以MJPG读取usb摄像头 修改格式的原因 用 cap = cv2.VideoCapture(1)打开usb双目摄像头时发现帧率很低,使用cap.set(cv2.CAP_ ...

  9. imx8mini openCV mipi摄像头报错: VIDIOC_QUERYCTRL: Inappropriate ioctl for device

    imx8mini openCV摄像头报错: VIDIOC_QUERYCTRL: Inappropriate ioctl for device 简单介绍: 首先来看python 源码 然后是openCV ...

最新文章

  1. ORB-SLAM3在windows下的编译使用
  2. Android优化之内存优化倒计时篇
  3. Android中Gallery和ImageSwitcher的使用
  4. 真香!你的 2019 年终总结已经出 - 请查收
  5. 当我们年轻的时候 (转贴)
  6. MS-SQLSERVER--错用了LEN()函数
  7. 目标检测必看——RCNN是怎样融合了分类与回归,CNN与SVM
  8. OSGI(面向Java的动态模型系统)和它的实现Equinox
  9. 旺旺上显示已上传服务器,在服务器上排除问题的头五分钟 | 旺旺知识库
  10. 兼具颜值与智慧 华为Mate 10 Pro体验图赏
  11. 计算机派位志愿填报技巧,小升初电脑派位 填报也有技巧
  12. 塔设备设计手册_强烈推荐必备资料—化工设备设计手册 (上、下卷全)
  13. Mysql之Specified key was too long; max key length is 767 bytes
  14. 【webView】webView和原生Android交互
  15. 网络空间安全基础(待续)
  16. DDR4内存大小等信息计算
  17. linux: ubuntu 21.04 安装搜狗拼音输入法
  18. 缓冲区、通道、Files、NIO2
  19. Go : const rotates恒定旋转(附完整源码)
  20. 如何使用加密锁加密自己程序

热门文章

  1. 盘点2017 CES展会所有亮眼黑科技 (上)
  2. WIDS(无线入侵检测)
  3. 使用Unity调用派样机技术小结
  4. LaTeX插入参考文献
  5. JAVA毕设项目喜枫日料店自助点餐系统(java+VUE+Mybatis+Maven+Mysql)
  6. C语言——矩阵计算(转置、加法、减法、数乘、乘法)
  7. 大数据比赛第一步——数据分析
  8. 几个实用的app和网站
  9. “无聊猿” BAYC 的内忧与外患
  10. 告别第三方检测,教你用Windows自带工具检测!