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入门篇之正则表达式
Oct 20 Python
Python中模块pymysql查询结果后如何获取字段列表
Jun 05 Python
python提取图像的名字*.jpg到txt文本的方法
May 10 Python
使用python生成杨辉三角形的示例代码
Aug 29 Python
Python面向对象基础入门之编码细节与注意事项
Dec 11 Python
Django 对IP访问频率进行限制的例子
Aug 30 Python
Python sep参数使用方法详解
Feb 12 Python
Python threading.local代码实例及原理解析
Mar 16 Python
pycharm 激活码及使用方式的详细教程
May 12 Python
详解selenium + chromedriver 被反爬的解决方法
Oct 28 Python
Django haystack实现全文搜索代码示例
Nov 28 Python
python套接字socket通信
Apr 01 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
提高define性能的php扩展hidef的安装和使用
2011/06/14 PHP
php绘图中显示不出图片的原因及解决
2014/03/05 PHP
php以post形式发送xml的方法
2014/11/04 PHP
php的ddos攻击解决方法
2015/01/08 PHP
JS getMonth()日期函数的值域是0-11
2010/02/15 Javascript
AngularJS  双向数据绑定详解简单实例
2016/10/20 Javascript
jQuery使用DataTable实现删除数据后重新加载功能
2017/02/27 Javascript
jQuery+koa2实现简单的Ajax请求的示例
2018/03/06 jQuery
监听angularJs列表数据是否渲染完毕的方法示例
2018/11/07 Javascript
微信小程序搜索功能(附:小程序前端+PHP后端)
2019/02/28 Javascript
微信小程序iOS下拉白屏晃动问题解决方案
2019/10/12 Javascript
Weex开发之地图篇的具体使用
2019/10/16 Javascript
JS正则表达式验证端口范围(0-65535)
2020/01/06 Javascript
javascript实现前端input密码输入强度验证
2020/06/24 Javascript
操作Windows注册表的简单的Python程序制作教程
2015/04/07 Python
用Eclipse写python程序
2018/02/10 Python
解决Python设置函数调用超时,进程卡住的问题
2019/08/08 Python
python自动化测试之异常及日志操作实例分析
2019/11/09 Python
如何使用Django Admin管理后台导入CSV
2020/11/06 Python
Django数据库迁移常见使用方法
2020/11/12 Python
快速一键生成Python爬虫请求头
2021/03/04 Python
详解HTML5.2版本带来的修改
2020/05/06 HTML / CSS
聪明的粉丝购买门票的地方:TickPick
2018/03/09 全球购物
Skip Hop官网:好莱坞宝宝挚爱品牌
2018/06/17 全球购物
String这个类型的class为何定义成final?
2012/11/13 面试题
EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的
2015/07/24 面试题
出国英文推荐信
2014/05/10 职场文书
争先创优公开承诺书
2014/08/30 职场文书
慈善捐赠倡议书
2014/08/30 职场文书
营销总经理岗位职责范本
2014/09/02 职场文书
工作自我推荐信范文
2015/03/25 职场文书
圆明园观后感
2015/06/03 职场文书
电视新闻稿
2015/07/17 职场文书
中学图书馆工作总结
2015/08/11 职场文书
开网店计划分析
2019/07/30 职场文书
php 解析非标准json、非规范json
2021/04/01 PHP