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

 更新时间:2019年08月28日 12:05:45   作者:henry.Woo  
这篇文章主要为大家详细介绍了Python通过cv2读取多个USB摄像头,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了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)

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

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

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

相关文章

  • Python基础之操作MySQL数据库

    Python基础之操作MySQL数据库

    这篇文章主要介绍了Python基础之操作MySQL数据库,文中有非常详细的代码示例,对正在学习python基础的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-05-05
  • Python中eval()函数的详细使用教程

    Python中eval()函数的详细使用教程

    eval函数在Python中具有非常重要的地位,熟练的使用eval函数能够为我们的Python编程提供很多的便利之处,下面这篇文章主要给大家介绍了关于Python中eval()函数的详细使用,需要的朋友可以参考下
    2022-07-07
  • python+flask编写一个简单的登录接口

    python+flask编写一个简单的登录接口

    这篇文章主要介绍了python+flask编写一个简单的登录接口,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2020-11-11
  • 详解Python如何实现压缩与解压缩数据

    详解Python如何实现压缩与解压缩数据

    当数据量大的时候,自然而然想到的就是对数据进行压缩,这篇文章主要为大家介绍了Python可以实现压缩与解压缩数据的相关模块的使用,希望对大家有所帮助
    2024-02-02
  • Python里的dict和set的背后小秘密

    Python里的dict和set的背后小秘密

    这篇文章主要介绍了在Python里的dict和set的背后小秘密,dict字典是Python中的重要基础知识,set与其类似,需要的朋友可以参考下
    2021-11-11
  • 详解Python中生成随机数据的示例详解

    详解Python中生成随机数据的示例详解

    在日常工作编程中存在着各种随机事件,同样在编程中生成随机数字的时候也是一样。每当在 Python 中生成随机数据、字符串或数字时,最好至少大致了解这些数据是如何生成的。所以本文将详细为大家讲解一下Python是如何生成随机数据,需要的可以参考一下
    2022-04-04
  • Django之全局使用request.user.username的实例详解

    Django之全局使用request.user.username的实例详解

    这篇文章主要介绍了Django之全局使用request.user.username的实例详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • Python编程生成随机用户名及密码的方法示例

    Python编程生成随机用户名及密码的方法示例

    这篇文章主要介绍了Python编程生成随机用户名及密码的方法,结合实例形式分析了Python随机字符串的相关操作技巧,需要的朋友可以参考下
    2017-05-05
  • 一次搞懂hasattr()/getattr()/setattr()在Python中的应用

    一次搞懂hasattr()/getattr()/setattr()在Python中的应用

    在Python中,hasattr()、getattr()和setattr()是一组内置函数,本文将从入门到精通,全面介绍hasattr()、getattr()和setattr()函数的用法和相关知识点,需要的可以了解下
    2023-08-08
  • Python中的装饰器使用

    Python中的装饰器使用

    这篇文章主要介绍了Python中的装饰器使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12

最新评论