【杂记】同时调用多个摄像头

最近做研究需要采集数据,需求是这样的:
制作一个可以移动的设备(暂且叫做设备吧),对同一个物体同时从10个角度进行拍摄
难点是这样的:
准备使用比较成熟的HIKVION的USB摄像头进行拍摄,但是树莓派、Jeston板这些usb接口都是十分有限的,所以就需要用到USB Hub。但是USB Hub不能够同时打开两个摄像头。可能的原因是由于单个USB最大传输是70MB,两个(及其以上)的摄像头会超过这个带宽(原因依据)。


再次列出解决方法及其存在的缺陷,如有其他方法我也会在这个博文上进行总结和更新。


目前的解决方法1:

写一个轮续,打开一个关掉后在打开另一个。
缺点:关掉前一个程序(.release函数)所用的时间太长(大概一秒钟)
代码

# -*- coding=GBK -*-
import cv2 as cv
import time
import cv2
# 打开摄像头获取图片
def video_demo():
    capture_1 = cv.VideoCapture(0)  # 打开摄像头,0代表的是设备id,如果有多个摄像头,可以设置其他数值
    capture_2 = cv.VideoCapture(1)  # 打开摄像头,0代表的是设备id,如果有多个摄像头,可以设置其他数值

    ret_1, frame_1 = capture_1.read()  # 读取摄像头,它能返回两个参数,第一个参数是bool型的ret,其值为True或False,代表有没有读到图片;第二个参数是frame,是当前截取一帧的图片
    frame_1 = cv.flip(frame_1, 1) # flip():图像翻转函数   第二个参数 小于0: 180°旋转,等于0: 上下颠倒,大于0: 水平颠倒(镜像图)
    cv.imshow("video_1", frame_1)

    cv2.imwrite("test1.png", frame_1)
    capture_1.release()
    strat1 = time.time()

    # time.sleep(0.5)
    ret_2, frame_2 = capture_2.read()  # 读取摄像头,它能返回两个参数,第一个参数是bool型的ret,其值为True或False,代表有没有读到图片;第二个参数是frame,是当前截取一帧的图片
    frame_2 = cv.flip(frame_2, 1)  # flip():图像翻转函数   第二个参数 小于0: 180°旋转,等于0: 上下颠倒,大于0: 水平颠倒(镜像图)
    cv.imshow("video_2", frame_2)

    cv2.imwrite("test2.png", frame_2)# 详见备注
    capture_2.release()
    strat2 = time.time()
    print(strat2 - strat1)

video_demo()
cv.destroyAllWindows()

结果在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/vibration_xu/article/details/126533219