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 07 Python
python批量添加zabbix Screens的两个脚本分享
Jan 16 Python
基于Python对象引用、可变性和垃圾回收详解
Aug 21 Python
python 接口_从协议到抽象基类详解
Aug 24 Python
python对列进行平移变换的方法(shift)
Jan 10 Python
python join方法使用详解
Jul 30 Python
Django框架 Pagination分页实现代码实例
Sep 04 Python
python+adb+monkey实现Rom稳定性测试详解
Apr 23 Python
python如何写try语句
Jul 14 Python
python redis存入字典序列化存储教程
Jul 16 Python
python工具——Mimesis的简单使用教程
Jan 16 Python
解决import tensorflow导致jupyter内核死亡的问题
Feb 06 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扩展函数
2006/10/09 PHP
php入门小知识
2008/03/24 PHP
PHP base64+gzinflate压缩编码和解码代码
2008/10/03 PHP
php实现用于计算执行时间的类实例
2015/04/18 PHP
PHP获取音频文件的相关信息
2015/06/22 PHP
Composer设置忽略版本匹配的方法
2016/04/27 PHP
php解析非标准json、非规范json的方式实例
2020/12/10 PHP
jquery中ajax函数执行顺序问题之如何设置同步
2014/02/28 Javascript
jQuery DOM操作实例
2014/03/05 Javascript
JS数组的遍历方式for循环与for...in
2014/07/31 Javascript
jQuery中index()方法用法实例
2014/12/27 Javascript
纯javascript实现自动发送邮件
2015/10/21 Javascript
jquery实现全屏滚动
2015/12/28 Javascript
JavaScript从0开始构思表情插件
2016/07/26 Javascript
基于JS实现二维码图片固定在右下角某处并跟随滚动条滚动
2017/02/08 Javascript
如何重置vue打印变量的显示方式
2017/12/06 Javascript
vue路由 遍历生成复数router-link的例子
2019/10/30 Javascript
微信小程序实现滑动翻页效果(完整代码)
2019/12/06 Javascript
深度定制Python的Flask框架开发环境的一些技巧总结
2016/07/12 Python
python 利用栈和队列模拟递归的过程
2018/05/29 Python
Python GUI Tkinter简单实现个性签名设计
2018/06/19 Python
python实现机器学习之多元线性回归
2018/09/06 Python
python初学者,用python实现基本的学生管理系统(python3)代码实例
2019/04/10 Python
python 缺失值处理的方法(Imputation)
2019/07/02 Python
Python模块_PyLibTiff读取tif文件的实例
2020/01/13 Python
Python Pivot table透视表使用方法解析
2020/09/11 Python
某公司.Net方向面试题
2014/04/24 面试题
警察思想汇报
2014/01/04 职场文书
《圆明园的毁灭》教学反思
2014/02/28 职场文书
1亿有多大教学反思
2014/05/01 职场文书
干部鉴定材料
2014/05/18 职场文书
关于群众路线的心得体会
2014/11/05 职场文书
2014年小学英语教师工作总
2014/12/03 职场文书
社会实践活动报告
2015/02/05 职场文书
2015暑期工社会实践报告
2015/07/13 职场文书
深入理解 Golang 的字符串
2022/05/04 Golang