Come si acquisiscono video da due o più videocamere contemporaneamente (o quasi) con OpenCV, utilizzando l'API Python?Lettura simultanea di due telecamere in OpenCV
Ho tre webcam, tutte in grado di streaming video, situate in/dev/video0,/dev/video1 e/dev/video2.
Utilizzando la tutorial come esempio, l'acquisizione di immagini da una singola telecamera è semplicemente:
import cv2
cap0 = cv2.VideoCapture(0)
ret0, frame0 = cap0.read()
cv2.imshow('frame', frame0)
cv2.waitKey()
E questo funziona bene.
Tuttavia, se cerco di inizializzare una seconda telecamera, cercando di read()
da esso restituisce None:
import cv2
cap0 = cv2.VideoCapture(0)
cap1 = cv2.VideoCapture(1)
ret0, frame0 = cap0.read()
assert ret0 # succeeds
ret1, frame1 = cap1.read()
assert ret1 # fails?!
solo per garantire che non è stato accidentalmente dando OpenCV un indice fotocamera male, ho provato ogni indice fotocamera individualmente e tutti lavorano da soli. per esempio.
import cv2
#cap0 = cv2.VideoCapture(0)
cap1 = cv2.VideoCapture(1)
#ret0, frame0 = cap0.read()
#assert ret0
ret1, frame1 = cap1.read()
assert ret1 # now it works?!
Cosa sto sbagliando?
Modifica: il mio hardware è un Macbook Pro con Ubuntu. Ricercando il problema in particolare sui MacBook, ho trovato altri che hanno incontrato questo problema, sia su OSX che con diversi tipi di fotocamere. Se accedo a iSight, entrambe le chiamate nel mio codice falliscono.
Se si modifica l'ordine delle istruzioni VideoCapture si verifica l'errore sull'altro canale? – kpie
Questo sembra funzionare bene per me su Windows. – ballsatballsdotballs
Le telecamere sono entrambe integrate o USB? È possibile che non possano operare simultaneamente se [sono sullo stesso bus seriale] (http://answers.opencv.org/question/19556/videocapture-open-wont-open-second-camera/) perché il bus seriale è, beh, seriale. –