opencv python 打开双目摄像头

真的非常迷 - -

双目摄像头通过一根usb与电脑连接,如果直接这样会报错。但是调用摄像头0和1(电脑摄像头和双目左)或0和2(电脑摄像头和双目右)都是可以的。

cap1 = cv2.VideoCapture(1 + cv2.CAP_DSHOW)
cap2 = cv2.VideoCapture(2 + cv2.CAP_DSHOW)

while True:
    ret1, frame1 = cap1.read()
    et2, frame2 = cap2.read()
    cv2.imshow('frame1', frame1)
    cv2.imshow('frame2', frame2)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
cap.release()
cap1.release()
cv2.destroyAllWindows()

查了很久,发现是这样:https://bbs.csdn.net/topics/391889458

换台电脑试试吧
这事儿我去年遇到过 不是程序问题 同样的程序换了几台电脑跑 有的电脑可以同时以1208*720标清打开两个甚至3个摄像头
有的只能打开1路标清
但是分辨率改成640*480就能同时打开两路
结论就是USB总线带宽问题

是电脑的USB设备器件不行 传输带宽达不到同时开启两路视频的要求
现在的电脑主板都号称支持USB2.0 但制造商总会在你看不到的地方偷工减料 导致USB总线带宽不足

所以修改分辨率:

cap1 = cv2.VideoCapture(1 + cv2.CAP_DSHOW)
cv2.VideoCapture.set(cap1, 3, 270)  # 这里Property identifier要求是int
cv2.VideoCapture.set(cap1, 4, 270)  # 见下图,3表示CV_CAP_PROP_FRAME_WIDTH,设为270.(设为1和270的效果一样)
# 注意顺序,先设置分辨率,再实例化另一个摄像头。否则依旧报错。
cap2 = cv2.VideoCapture(2 + cv2.CAP_DSHOW)
cv2.VideoCapture.set(cap2, 3, 1)
cv2.VideoCapture.set(cap2, 4, 1)
ret1, frame1 = cap1.read()
ret2, frame2 = cap2.read()
while ret1 and ret2:
    ret1, frame1 = cap1.read()
    ret2, frame2 = cap2.read()
    cv2.imshow('frame1', frame1)
    cv2.imshow('frame2', frame2)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
cap1.release()
cap2.release()
cv2.destroyAllWindows()

猜你喜欢

转载自blog.csdn.net/weixin_41703033/article/details/85240251