2012-02-15 10 views
7

Ho un progetto in cui ho bisogno di lavorare con una fotocamera USB per elaborare le immagini acquisite a distanza ravvicinata (meno di 5 mm). Poiché lo spazio disponibile è molto breve, non posso usare l'obiettivo ausiliario.Accesso ai controlli della fotocamera USB con AForge

So che posso eseguire postelaborazioni a livello di bitmap, ma vorrei ottenere l'accesso a proprietà come la messa a fuoco automatica o il bilanciamento del bianco a livello di videocamera.

Sto sviluppando in C# con AForge per l'acquisizione di immagini e post-elaborazione, ma non riesco a trovare un modo per controllare la fotocamera prima che avvenga l'acquisizione dell'immagine.

Potete aiutarmi?

risposta

7

Dopo una ricerca più approfondita ho trovato il answer da solo.

Se qualcun altro sta cercando questo, è possibile provare quanto segue;

VideoCaptureDevice Cam1; 
FilterInfoCollection VideoCaptureDevices; 

VideoCaptureDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice); 
Cam1 = new VideoCaptureDevice(VideoCaptureDevices[0].MonikerString); 
Cam1.DisplayPropertyPage(IntPtr.Zero); //This will display a form with camera controls 

Sembra anche possibile controllare questi elementi, senza il modulo utilizzando IAMVideoProcAmp

+0

@Darshana La modifica che hai apportato era troppo piccola. Questo non avrebbe dovuto essere approvato, quindi l'ho riportato indietro. Per favore dedica più impegno alle tue modifiche. [Leggi questo] (http://stackoverflow.com/help/editing) se non sei sicuro di come modificare correttamente i post. – Gray

6

È possibile accedere impostando direttamente senza la chiamata del metodo DisplayPropertyPage()

FilterInfoCollection videoDevices = 
    new FilterInfoCollection(FilterCategory.VideoInputDevice); 

VideoCaptureDevice videoDevice = 
    new VideoCaptureDevice(videoDevices[camDevice].MonikerString); 

videoDevice.SetCameraProperty(
    CameraControlProperty.Zoom, 
    zoomValue, 
    CameraControlFlags.Manual); 

videoDevice.SetCameraProperty(
    CameraControlProperty.Focus, 
    focusValue, 
    CameraControlFlags.Manual); 

videoDevice.SetCameraProperty(
    CameraControlProperty.Exposure, 
    exposureValue, 
    CameraControlFlags.Manual); 
1

Per accedere ad altre proprietà camera camera come luminosità, contrasto vedi IAMVideoProcAmp implementation

videoDevice.SetVideoProperty(
    VideoProcAmpProperty.Brightness, 
    brightnessValue, 
    VideoProcAmpFlags.Manual); 

videoDevice.SetVideoProperty(
    VideoProcAmpProperty.Contrast, 
    contrastValue, 
    VideoProcAmpFlags.Manual); 

videoDevice.SetVideoProperty(
    VideoProcAmpProperty.Saturation, 
    saturationValue, 
    VideoProcAmpFlags.Manual); 

videoDevice.SetVideoProperty(
    VideoProcAmpProperty.Sharpness, 
    sharpnessValue, 
    VideoProcAmpFlags.Manual); 

videoDevice.SetVideoProperty(
    VideoProcAmpProperty.WhiteBalance, 
    whiteBalanceValue, 
    VideoProcAmpFlags.Manual); 

videoDevice.SetVideoProperty(
    VideoProcAmpProperty.BacklightCompensation, 
    backlightCompensationValue, 
    VideoProcAmpFlags.Manual); 
+1

Grazie per la risposta. Hai aggiunto informazioni preziose alla mia idea iniziale: che era possibile impostarle usando IAMVideoProcAmp. Sono trascorsi un paio d'anni dal mio primo post, ma le informazioni potrebbero comunque essere rilevanti per alcuni utenti. – Shadlan

Problemi correlati