2012-02-14 15 views
13

Używam OpenCV2.2 z wideoInput. Chcę uaktualnić do wersji OpenCV2.3.1, w której wideoInput najprawdopodobniej zostało połączone w OpenCV2.3.Jak uzyskać listę kamer internetowych korzystających z opencv?

Mój problem polega na tym, że nie wydaje się, aby funkcja listdevices() zwracała wszystkie dostępne źródła wideo.

Czy ktoś zna nowy odpowiednik?

+0

można umieścić pełny kod na ten temat? Próbuję wyświetlić listę wszystkich kamer internetowych, ale bezskutecznie. –

Odpowiedz

2

Zobacz this odpowiedź StackOverflow. Obecnie nie jest obsługiwane przez OpenCV, ponieważ jest to platforma wieloplatformowa, a wyliczanie kamer jest bardzo specyficzne dla platformy (np. V4l2 wylicza inaczej niż DirectShow). Ale ktoś przesłał enhancement request przeciwko wersji 2.2 a chwilę temu.

10

Jak już powiedziałeś, videoinput został połączony w OpenCV od 2.3rc.

Patrząc na odpowiednią wartość wideo, wydaje się, że wartość wideo w highgui jest taka, jak określa dziennik zmian OpenCV. Jednak to, czy Twój OpenCV jest zbudowany z włączoną opcją jest konfigurowalną opcją w Cmake (opcja to WITH_VIDEOINPUT, a także wymaga, aby była to kompilacja WIN32, patrz here).

OpenCV wywołuje listę urządzeń wewnętrznie jako VI.listDevices() w implementacji CvCaptureCAM_DShow::open, a klasa VideoInput jest chronionym członkiem CvCaptureCAM_DShow.

można uzyskać dostęp za pomocą funkcji listdevices

CvCapture* capture = cvCaptureFromCAM(CV_CAP_DSHOW); 
capture->VI.listDevices(); 
+1

Co to jest CMAKE, aby włączyć VI? Czy możesz wyjaśnić? Wpisuję fragment kodu próbki. Mówi, że VI nie jest prawidłowym obiektem. – 2vision2

1

I kodowane klasę, która pozwala wyliczyć wszystkich urządzeń za pomocą interfejsu DirectShow i rachmistrzów. Chociaż działa tylko w systemie Windows, pozwoli ci uzyskać listę "przyjaznych nazw urządzeń" i identyfikatorów, które musisz utworzyć, na przykład obiekt VideoCapture.

Kod jest tutaj:

https://github.com/studiosi/OpenCVDeviceEnumerator

Powiązane problemy