2025年3月30日 星期日 甲辰(龙)年 月廿九 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > Python

多个usb相机使用心得

时间:02-02来源:作者:点击数:75

显示多个video*

一个摄像头插入后会出现两个video且都有同样设备名,比如video0,video1。只有video0有数据。另一个video1用opencv是读不到数据的。(而且往往是编号较小的那个video*是可以读的)

绑定多个相机端口号

参考博客ubuntu18.04固定摄像头标志为video0

多个相机插入不同USB口

两个usb相机同时打开可能会出现问题。通过一个usb口进入主板的两个相机会出现第一个相机占用端口的问题,导致第二个相机无法打开。必须要插两个独立的usb口。

设置曝光值

OpenCV 3.4.10不支持更改exposure曝光参数,偶然间我使用自己台式机上opencv-python 4.2.0的cv2支持更改参数。知道是OpenCV版本问题,4.2.0修复了bug。

如果需要ros话题,可以直接用OpenCV 4.2.0cv2转发成rostopic

附相机读取代码

  • #!/usr/bin/env python
  • # coding: utf-8
  • import cv2
  • print(cv2.__version__)
  • cap_ir_mono = cv2.VideoCapture('/dev/video_ir_mono')
  • # cap_color_mono = cv2.VideoCapture('/dev/video0')
  • # cap_color_mono = cv2.VideoCapture(0)
  • ## 设置曝光参数
  • cap_ir_mono.set(cv2.CAP_PROP_AUTO_EXPOSURE, 1) # manual mode
  • cap_ir_mono.set(cv2.CAP_PROP_EXPOSURE, 10) # value form 1 ~ 30 is ok
  • while cap_ir_mono.isOpened():
  • ret_ir, frame_ir = cap_ir_mono.read()
  • print('ir:', ret_ir)
  • if ret_ir:
  • print('ir:', len(frame_ir))
  • cv2.imshow("cap_ir", frame_ir)
  • cv2.waitKey(1)
  • '''
  • 下面是多线程打开多个相机,经常找设备失败。不好用
  • '''
  • # import cv2
  • # import threading
  • # import time
  • #
  • # class camThread(threading.Thread):
  • # def __init__(self, previewName, camID):
  • # threading.Thread.__init__(self)
  • # self.previewName = previewName
  • # self.camID = camID
  • # def run(self):
  • # print("Starting " + self.previewName)
  • # print("self.camID " + self.camID)
  • # self.camPreview(self.camID)
  • #
  • # def camPreview(self, type):
  • # if type == 'color':
  • # print('type color: ', type)
  • # cam = cv2.VideoCapture(5)
  • # while cam.isOpened():
  • # rval, frame = cam.read()
  • # print('rval: ', rval)
  • # if rval:
  • # cv2.imshow(self.previewName, frame)
  • # key = cv2.waitKey(1)
  • # if key == 27: # exit on ESC
  • # break
  • # cv2.destroyWindow(self.previewName)
  • #
  • # elif type == 'ir':
  • # print('type ir: ', type)
  • # cam = cv2.VideoCapture(2)
  • # while cam.isOpened():
  • # rval, frame = cam.read()
  • # print('rval: ', rval)
  • # if rval:
  • # cv2.imshow(self.previewName, frame)
  • # key = cv2.waitKey(1)
  • # if key == 27: # exit on ESC
  • # break
  • # cv2.destroyWindow(self.previewName)
  • #
  • # if __name__ == "__main__":
  • # # Create threads as follows
  • # thread1 = camThread("color_mono", 'color')
  • # thread2 = camThread("ir_mono", 'ir')
  • #
  • # thread1.start()
  • # time.sleep(3)
  • # thread2.start()
  • # print("Active threads", threading.activeCount())
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门