我在我的应用程序中使用 EMGU CV 库。我如何手动将相机焦点设置为对象?现在我正在使用 Capture 类来抓取图像。
问问题
4465 次
2 回答
10
我通过使用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)
于 2013-08-12T14:03:12.037 回答
1
EmguCV 本质上是 C# 的 OpenCV,它只是一个图像处理库。Camera 类仅对捕获图像有用,而不是控制相机参数(您可以在Emgu 的文档中清楚地看到这一点)。在实践中,有许多不同种类的摄像机,具有不同的控制方法。实际上,根据您的问题,我无法推断您使用的是哪种相机:网络摄像头、闭路电视或摄影单反?
您可以采用的常用方法:使用 EmguCV 使用对比度检测来检测相机是否对焦并相应地控制相机。对于网络摄像头,他们通常内置自动对焦,对于其他类型的摄像头,请查阅他们的文档。
于 2013-08-08T11:41:14.923 回答