c ++ - Hvordan får jeg en liste over webcam-enheder, der bruger opencv?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg bruger OpenCV2.2 med videoInput. Jeg vil opgradere til OpenCV2.3.1, hvor videoInput tilsyneladende er blevet slået sammen i OpenCV2.3.


Mit problem er, at der ikke synes at være en listdevices () -funktion til at returnere alle tilgængelige videokilder.


Kender nogen den nye ækvivalent?

Bedste reference


Som du sagde, er videoinput blevet fusioneret i OpenCV siden 2.3rc.


Når man ser på den relevante kilde, vises videoindgangen i høj grad, som OpenCV changelog angiver. Selv om din OpenCV er bygget med den aktiveret, er en konfigurerbar mulighed i Cmake (Indstillingen er WITH\_VIDEOINPUT og kræver også, at det er en WIN32-bygning, se her. [5] [6]


OpenCV kalder listedvices internt som VI.listDevices() i implementeringen af ​​CvCaptureCAM\_DShow::open og videoInput Class er et beskyttet medlem af CvCaptureCAM\_DShow.


Du kan få adgang listedvices funktion ved hjælp af


 CvCapture* capture = cvCaptureFromCAM( CV\_CAP\_DSHOW );
 capture->VI.listDevices();

Andre referencer 1


Se dette StackOverflow svar. Det understøttes i øjeblikket ikke af OpenCV, fordi det er cross platform, og kameraantal er meget platformspecifikke (fx v4l2 opregner anderledes end DirectShow). Men nogen indgav en enhedsanmodning mod version 2.2 et stykke tid tilbage. [8]

Andre referencer 2


Jeg kodede en klasse, der gør det muligt at opregne alle enheder ved hjælp af DirectShow-grænsefladen og opregnerne. Mens det kun vil fungere på Windows, vil det give dig mulighed for at få en liste over 'venlige enhedsnavne' og de ids, du skal oprette, for eksempel et VideoCapture-objekt.


Koden er her:


https://github.com/studiosi/OpenCVDeviceEnumerator[9]