手动将相机对准EMGU CV

时间:2013-08-08 11:18:00

标签: c# .net opencv emgucv

我在我的应用程序中使用EMGU CV库。如何手动将相机焦点设置为对象? 现在我正在使用Capture类来获取图像。

2 个答案:

答案 0 :(得分:8)

我使用DirectShow找到了解决方案。通过IAMCameraControl界面,我可以控制相机的曝光和聚焦。代码示例:

 DsDevice[] devs = DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice); // getting video devices
 IFilterGraph2 graphBuilder = new FilterGraph() as IFilterGraph2; 
 IBaseFilter capFilter = null;
 if (graphBuilder != null)
 graphBuilder.AddSourceFilterForMoniker(devs[0].Mon, null, devs[0].Name, 
    out capFilter); //getting capture filter for converting it into IAMCameraControl
 IAMCameraControl _camera = capFilter as IAMCameraControl;
 _camera.Set(CameraControlProperty.Focus, 250, CameraControlFlags.Manual); //Setting focus to macro (in my camera, range between 0 - 250)

答案 1 :(得分:1)

EmguCV本质上是C#的OpenCV,它只是一个图像处理库。 Camera类仅用于捕获图像,而不是控制相机参数(您可以在Emgu's documentation中清楚地看到这一点)。在实践中,有许多不同类型的相机,具有不同的控制方法。实际上从你的问题我无法推断出你使用的是哪种相机:网络摄像头,CCTV或摄影数码单反相机?

您可以采用的常用方法:使用EmguCV使用contrast detection检测相机是否处于焦点或焦点不对焦并相应地控制相机。对于网络摄像头,他们通常内置自动对焦功能,与其他类型的相机一起查阅他们的文档。