【问题标题】:How to programatically disable the auto-focus of two webcams in opencv如何以编程方式禁用opencv中两个网络摄像头的自动对焦
【发布时间】:2013-01-30 07:23:37
【问题描述】:

由于自动对焦,我很难校准两个相机并获得它们的姿势。我正在使用两个相同类型的罗技网络摄像头,openCV 和 C++。

我试过了:

cv::Size imageSize(1600,1200);      
cv::VideoCapture cap1(0);
cap1.set(CV_CAP_PROP_FRAME_WIDTH,imageSize.width);
cap1.set(CV_CAP_PROP_FRAME_HEIGHT,imageSize.height);

cv::VideoCapture cap2(1);
cap2.set(CV_CAP_PROP_FRAME_WIDTH,imageSize.width);
cap2.set(CV_CAP_PROP_FRAME_HEIGHT,imageSize.height);




IAMCameraControl *pCameraControl; 
HRESULT hr; 
if (hr == S_OK) {
  long defaultFocusValue = 0;
  hr = pCameraControl->Set(CameraControl_Focus, // property 
                        defaultFocusValue, // value
                        CameraControl_Flags_Manual //Flag
                                ); 
}   

只使用一台相机它可以工作,但使用两台 - 它不是。

谁能帮帮我?

【问题讨论】:

  • 这与计算机视觉有什么关系?您仅使用与平台相关的 API 来控制与设备相关的参数。 OpenCV 在这里什么也不做。不过,我认为这个问题在你将其简化为核心之后就很好了:“如何使用 DirectShow 中的 IAMCameraControl 以编程方式控制两个网络摄像头的自动对焦?”
  • 正确支持属性是相机驱动程序的责任。不清楚是你做错了,还是驱动端支持错了。

标签: c++ opencv webcam directshow


【解决方案1】:

IAMCameraControl 接口在 DirectShow 捕获过滤器上公开。您没有展示如何获得此接口,但通常您需要从每个捕获过滤器中获取此接口的单独实例,如(C# 代码示例):

IAMVideoProcAmp VideoProcAmp1 { get { return cap1 as IAMVideoProcAmp; } }
IAMVideoProcAmp VideoProcAmp2 { get { return cap2 as IAMVideoProcAmp; } }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-29
    • 2013-04-25
    • 1970-01-01
    • 2011-10-15
    • 1970-01-01
    • 2011-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多