• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

python 搞代码 4年前 (2022-01-09) 83次浏览 已收录 0个评论

本文实例为大家分享了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 接入顺序保存在一个数据结构中,因此可以假定按设备插入的先后顺序来判定使用哪个摄像头。

以上就是本文本文来源gaodai$ma#com搞$代*码*网(的全部内容,希望对大家的学习有所帮助,也希望大家多多支持搞代码


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Python通过cv2读取多个USB摄像头

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址