PC用opencv打开多个usb摄像机时报错解决方法

最近做项目时发现打开双相机的python程序在自己的笔记本上都可以运行,可是落地的时候放到车间的工作机上就非常不稳定,有时能够打开相机,有时又报错,报错的原因就是有相机没打开。

在网上搜索相关问题,感觉可行的解决方案应该是在通过相机ID来打开相机。于是写了用这样一个程序来暴力检索相机ID

import cv2
cams_test = 1000
for i in range(cams_test,-1,-1):
    cap = cv2.VideoCapture(i)
    test, frame = cap.read()
    if test:
        print("i : "+str(i)+" /// result: "+str(test)) 
       

然而这样做依旧是不稳定,有时是0,1,700,701。有时是0,700,有时甚至是1,701。这里0和700,1和701代表的是同一个相机。

所以分析这里问题是出在了

cap = cv2.VideoCapture(i)

可能是PC的外接USB的响应速度跟不上,导致一开始相机并没有打开,于是在打开相机的程序前加上一个while循环。

import cv2
import time

while True:
    time.sleep(3)
    cap1=cv2.VideoCapture(0)
    cap2=cv2.VideoCapture(1)
    bool1=cap1.isOpened()
    bool2=cap2.isOpened()
    if bool1 and bool2:
        break

while True:
    ret1,frame1=cap1.read()
    ret2,frame2=cap2.read()
    
    cv2.imshow("frame1",frame1)
    cv2.imshow("frame2",frame2)
      
    if cv2.waitKey(100) & 0xff == ord('q'):
        break
cap1.release()
cap2.release()

cv2.destroyAllWindows()

这样写的话就能够稳定打开相机了。

另外一点是在使用相机的时候0,1分别对应哪个相机并不知道,网上说可以通过opencv源码得到ID列表,但是本菜鸡不会在python中改。

发现,插入USB的顺序应该就是0,1的顺序

你可能感兴趣的:(opencv,python)