2012-02-15 25 views
7

Tengo un proyecto en el que necesito trabajar con una cámara USB para procesar imágenes adquiridas a muy corta distancia (menos de 5 mm). Debido a que el espacio disponible es muy corto, no puedo usar lentes auxiliares.Acceso a los controles de la cámara USB con AForge

Sé que puedo hacer algo de procesamiento posterior en el nivel de mapa de bits, pero me gustaría obtener acceso a propiedades como el enfoque automático o el balance de blancos a nivel de cámara.

Estoy desarrollando en C# con AForge para adquisición de imágenes y procesamiento posterior, pero parece que no puedo encontrar una manera de controlar la cámara antes de que se realice la adquisición de la imagen.

¿Me puede ayudar?

Respuesta

7

Después de una investigación más a fondo he encontrado el answer por mí mismo.

Si alguien más está buscando esto, puede intentar lo siguiente;

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 

También parece posible controlar estos elementos sin el formulario utilizando IAMVideoProcAmp

+0

@Darshana La edición que hizo fue muy leve. Eso no debería haber sido aprobado, así que lo devolví. Por favor, ponga más esfuerzo en sus ediciones. [Lea esto] (http://stackoverflow.com/help/editing) si no está seguro de cómo editar correctamente las publicaciones. – Gray

6

Se puede acceder a la configuración directamente sin convocatoria la DisplayPropertyPage método()

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

Para acceder a otras propiedades de la cámara de la cámara como brillo, contraste vea 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

Gracias por la respuesta. Ha agregado información valiosa a mi idea inicial: que era posible configurar estos usando el IAMVideoProcAmp. Han pasado un par de años desde mi primera publicación, pero la información aún puede ser relevante para algunos usuarios. – Shadlan

Cuestiones relacionadas