W jaki sposób przechwytujesz wideo z dwóch lub więcej kamer jednocześnie (lub prawie) z OpenCV, korzystając z API Pythona?Odczyt z dwóch kamer jednocześnie OpenCV
Mam trzy kamery internetowe, wszystkie z możliwością przesyłania strumieniowego wideo, zlokalizowane w/dev/video0,/dev/video1 i/dev/video2.
Używanie tutorial jako przykład, przechwytywania obrazów z pojedynczej kamery jest prosta:
import cv2
cap0 = cv2.VideoCapture(0)
ret0, frame0 = cap0.read()
cv2.imshow('frame', frame0)
cv2.waitKey()
I to działa prawidłowo.
Jednak gdy próbuję zainicjować drugi aparat, próbując read()
od zwraca 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?!
Wystarczy, aby upewnić się, że nie został przypadkowo dając OpenCV zły indeks kamery, testowałem każdy indeks kamery indywidualnie i wszystkie działają samodzielnie. na przykład
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?!
Co robię źle?
Edytuj: Mój sprzęt to Macbook Pro z uruchomionym systemem Ubuntu. Analizując problem specyficznie na komputerach MacBook, znalazłem innych, którzy również napotkali ten problem, zarówno na OSX, jak i na różnych typach kamer. Jeśli uzyskam dostęp do iSight, oba wywołania w moim kodzie zawodzą.
Jeżeli zmienisz kolejność wypowiedzi VideoCapture czy błąd występuje na innym kanale? – kpie
To wydaje się działać dobrze dla mnie w systemie Windows. – ballsatballsdotballs
Czy kamery są zintegrowane, czy USB? Możliwe, że nie mogą działać jednocześnie, jeśli [są w tym samym szeregowym autobusie] (http://answers.opencv.org/question/19556/videocapture-open-wont-open-second-camera/), ponieważ magistrala szeregowa jest, no cóż, seryjna. –