Python通过cv2读取多个USB摄像头


Posted in Python onAugust 28, 2019

本文实例为大家分享了Python通过cv2读取多个USB摄像头的具体代码,供大家参考,具体内容如下

通过 cv2 可以轻易的拿到摄像头数据。
比如以下几步就能打开摄像头显示,并通过 q 键保存图片

import cv2

capture = cv2.VideoCapture(0)
# 打开自带的摄像头
if capture.isOpened():
 # 以下两步设置显示屏的宽高
 capture .set(cv2.CAP_PROP_FRAME_WIDTH, 640)
 capture .set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
 
 # 持续读取摄像头数据
 while True:
  read_code, frame = capture.read()
  if not read_code:
   break
  cv2.imshow("screen_title", frame)
  # 输入 q 键,保存当前画面为图片
  if cv2.waitKey(1) == ord('q'):
   # 设置图片分辨率
   frame = cv2.resize(frame, (1920, 1080))
   cv2.imwrite('pic.jpg', frame)
   break
 # 释放资源  
 capture.release()
 cv2.destroyWindow("screen_title")

现在,接入了一个 USB 摄像头,并且希望通过代码同时操作它们,如何实现?
观察到 capture 的 open 函数,传入了摄像头的编号,增加的摄像头编号是递增的。

于是修改如下

import cv2

capture = cv2.VideoCapture(0)
capture_usb = cv2.VideoCapture(1)
# 打开自带的摄像头
if capture.isOpened():
 if capture_usb.isOpened():
 # 以下设置显示屏的宽高
 capture.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
 capture.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
 capture_usb.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
 capture_usb.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
 
 # 持续读取摄像头数据
 while True:
  read_code, frame = capture.read()
  read_code2, frame2 = capture_usb.read()
  if not read_code or not read_code2:
   break
  cv2.imshow("screen_title", frame)
  cv2.imshow("screen_title_usb", frame2)
  # 输入 q 键,保存当前画面为图片
  if cv2.waitKey(1) == ord('q'):
   # 设置图片分辨率
   frame = cv2.resize(frame, (1920, 1080))
   cv2.imwrite('pic.jpg', frame)
   capture_usb.release()
   break
 # 释放资源  
 capture.release()
 cv2.destroyWindow("screen_title")

尽管这样已经可以同时操作多个摄像头,但如果再接入一个 USB 摄像头,我们无法区分哪一个编号值代表哪个 USB 设备。

检查了实现的源码 (见:cap_8cpp_source.html)

Python通过cv2读取多个USB摄像头

open 函数确实只接收索引参数,并没有其它的同名实现。如果想要通过类似硬件 id 来唯一确定参数,需要单独实现这样的方法。

但通过分析源码发现,getAvailableBackends_CaptureByIndex() 中间有调用到这样的方法,于是大胆猜测摄像头信息应该按照 USB 接入顺序保存在一个数据结构中,因此可以假定按设备插入的先后顺序来判定使用哪个摄像头。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python生成验证码实例
Aug 21 Python
Python中类的定义、继承及使用对象实例详解
Apr 30 Python
python urllib爬取百度云连接的实例代码
Jun 19 Python
深入理解Django的自定义过滤器
Oct 17 Python
详解Python最长公共子串和最长公共子序列的实现
Jul 07 Python
深入浅析Python传值与传址
Jul 10 Python
python实现随机漫步方法和原理
Jun 10 Python
django实现用户注册实例讲解
Oct 30 Python
Python Handler处理器和自定义Opener原理详解
Mar 05 Python
python 获取当前目录下的文件目录和文件名实例代码详解
Mar 10 Python
浅谈优化Django ORM中的性能问题
Jul 09 Python
深入解析NumPy中的Broadcasting广播机制
May 30 Python
python3.5 cv2 获取视频特定帧生成jpg图片
Aug 28 #Python
Django--权限Permissions的例子
Aug 28 #Python
Python中函数的返回值示例浅析
Aug 28 #Python
django认证系统实现自定义权限管理的方法
Aug 28 #Python
Python中注释(多行注释和单行注释)的用法实例
Aug 28 #Python
对Django的restful用法详解(自带的增删改查)
Aug 28 #Python
Python closure闭包解释及其注意点详解
Aug 28 #Python
You might like
php获得当前的脚本网址
2007/12/10 PHP
php反弹shell实现代码
2009/04/22 PHP
php文件怎么打开 如何执行php文件
2011/12/21 PHP
PHP中基于ts与nts版本- vc6和vc9编译版本的区别详解
2013/04/26 PHP
yiic命令时提示“php.exe”不是内部或外部命令的解决方法
2014/12/18 PHP
PHP5多态性与动态绑定介绍
2015/04/03 PHP
PHP生成唯一订单号的方法汇总
2015/04/16 PHP
Linux系统中设置多版本PHP共存配合Nginx服务器使用
2015/12/21 PHP
jQuery 版本的文本输入框检查器Input Check
2009/07/09 Javascript
javascript 动态设置已知select的option的value值的代码
2009/12/16 Javascript
JQUBar 基于JQUERY的柱状图插件
2010/11/23 Javascript
jQuery 滑动方法slideDown向下滑动元素
2014/01/16 Javascript
单击某一段文字改写文本颜色
2014/06/06 Javascript
PHP配置文件php.ini中打开错误报告的设置方法
2015/01/09 PHP
向JavaScript的数组中添加元素的方法小结
2015/10/24 Javascript
完善的jquery处理机制
2016/02/21 Javascript
原生js实现验证码功能
2017/03/16 Javascript
Vue2组件tree实现无限级树形菜单
2017/03/29 Javascript
在vue中使用jointjs的方法
2018/03/24 Javascript
详解一次Vue低版本安卓白屏问题的解决过程
2019/05/30 Javascript
python的Crypto模块实现AES加密实例代码
2018/01/22 Python
python数字图像处理之骨架提取与分水岭算法
2018/04/27 Python
python skimage 连通性区域检测方法
2018/06/21 Python
在Pycharm中项目解释器与环境变量的设置方法
2018/10/29 Python
python实现BP神经网络回归预测模型
2019/08/09 Python
python利用opencv实现颜色检测
2021/02/23 Python
canvas拼图功能实现代码示例
2018/11/21 HTML / CSS
超市实习总结自我鉴定
2013/09/19 职场文书
暑期社会实践方案
2014/02/05 职场文书
2014两会学习心得:时代的发展
2014/03/17 职场文书
大一新生学期自我评价
2014/04/09 职场文书
白血病募捐倡议书
2014/05/14 职场文书
物业管理委托协议(2篇)
2014/09/23 职场文书
民间借贷纠纷起诉书
2015/08/03 职场文书
再见,2019我们不负使命;你好,2020我们砥砺前行
2020/01/03 职场文书
Consul在linux环境的集群部署
2022/04/08 Servers