2012-02-15 169 views
7

我有一个项目,我需要使用USB摄像头处理非常近距离(低于5毫米)的图像。由于可用空间很短,我无法使用辅助镜头。使用AForge访问USB摄像头控件

我知道我可以在位图级别进行一些后期处理,但是我想获得相机级别的自动对焦或白平衡等属性。

我正在用C#开发AForge进行图像采集和后期处理,但我似乎无法找到在图像采集发生之前控制相机的方法。

你能帮我吗?

回答

7

经过一些更彻底的研究后,我发现了answer

如果其他人正在寻找这个,你可以尝试以下;

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 

它似乎也可以通过使用IAMVideoProcAmp

控制这些项目,而不形式
+0

@Darshana你做的编辑太小了。这不应该被批准,所以我把它回滚了。请在编辑中加入更多努力。 [阅读此](http://stackoverflow.com/help/editing)如果你不确定如何正确编辑帖子。 – Gray 2013-11-14 13:34:23

6

您可以访问相机直接设置,而无需调用该方法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

要访问其他摄像头属性像亮度,对比见 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

谢谢你的回复。您已将有价值的信息添加到我的最初想法中:可以使用IAMVideoProcAmp设置这些信息。距离我的第一篇文章还有几年,但这些信息可能仍然与某些用户有关。 – Shadlan 2014-10-06 16:13:33