C ++:OpenCV2.4.11(!)访问网络摄像头参数

时间:2015-07-08 14:42:29

标签: c++ opencv directshow webcam-capture

这是我提出的最后一个问题的直接跟进,其中恰当地命名为“C ++:OpenCV2.3.1(!)访问网络摄像头参数”,并且我被告知要安装OpenCV2.4.11(OpenCV3.0没有不行......)我做了。是的,这个文本的大部分都是最后一个帖子的精确复制和粘贴,因为我的问题实际上并没有消失......

再一次,我在这里搜索过,在其他论坛上(谷歌,OpenCV等),查看了videoInput库的代码,不同的头文件,特别是OpenCV的highgui_c.h,似乎仍然无法找到答案对这个非常简单的问题:

如何使用OpenCV2.4.11在我的Logitech C310网络摄像头中更改曝光和增益(或者,通常,任何网络摄像头属性),就像我使用OpenCV2.1.0一样? (使用Win7 64位,Visual Studio 10)

编辑:这已经解决了。我不知道如何,但是当我今天早上测试我的代码时,它能够使用VideoCapture和set / get方法报告和设置曝光。

我知道,这是一个非常简单的VideoCapture get和set方法,类似于videoInput的[Set / Get] VideoSetting [Camera / Filter]功能。 这是我在OpenCV2.4.11中的一个不起作用的简短示例:

编辑:现在确实有效。我不明白的是,几个属性的值报告为 -8.58993E + 008 (即色调,monocrome,伽马,温度,变焦,焦点,平移,倾斜,滚动和虹膜)并且该属性6(fourcc) -4.66163E + 008 。我知道我的网络摄像头上没有这些功能,但所有其他未实现的功能报告-1。

int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, char* CmdArgs, int CmdShow) {
    int device0 = 0;
    VideoCapture VC(device0);
    if(!VC.isOpened())  // check if we succeeded
        return -1;
    ostringstream oss;
    double CamProp;
    for(int i=-4; i<27; i++) {
        CamProp = VC.get(i);
        Sleep(5);
        oss << "Item " << i << ": " << CamProp << "\n";
    }

    MessageBox(NULL, oss.str().c_str(), "Webcam Values", MB_OK);

    return 0;
}

它编译,运行,它可以访问网络摄像头(如果我将它添加到代码中,甚至可以显示带有imshow的图片),但它只会打开一个很好的窗口说: 项目-4:0
项目-3:0
项目-2:0
...
第2:0 第3项:640
项目4:480

第5:0 ...
项目25:0
项目26:0

编辑:见上文,现在有效。我获得了所有支持参数的值,如曝光,增益,清晰度,亮度,对比度等。也许我还在链接到2.3.1库或其他什么。

重点是:使用videoInput在OpenCV 2.1.0下使用这款相机完全可以设置。我有一个正在运行的应用程序在做自己的照明而不是使用Logitech功能(RightLight,Auto Exposure,Auto Whitebalance)。现在设置和获取参数已经集成到OpenCV highgui很长一段时间了,但功能列表大大减少(没有请求参数范围,最小/最大/步宽......,没有自动曝光设置,RightLight和类似的东西)由于某种原因,它与我的Logitech网络摄像头不兼容。我可以报告决议,但没有别的。

编辑:我仍然错过了videoInput的Min,Max,Step,Auto / Manual功能。我可以设置一个值,但我不知道是否允许它。

videoInput代码现在合并到文件cap_dshow.cpp中的OpenCV代码中,但我找不到声明videoInput类的头文件,只是使用我的旧代码不起作用。所以我有一个cpp文件,其中包含我需要的所有功能,而且我知道我曾经为我做过这项工作但我现在无法访问。关于如何做到这一点的任何线索?有没有人使用videoInput / DirectShow界面访问和更改了OpenCV2.4.11中的摄像机参数?

编辑:与2.3.1不同,现在似乎已经以一种有效的方式发生了这种情况。似乎不需要与videoInput直接交互。不过,出于上述原因,我很高兴。

还有一个有趣的问题就是使用例如

VideoCapture cam(0)

完全相同
VideoCapture cam(1)

VideoCapture cam(any integer value)

这对我来说很奇怪并暗示着同样的方向--CV的VideoCapture对我不起作用。类似的问题被描述为here,但是在打开捕获后我也尝试使用Sleep(1000)代码 - 但没有成功。

编辑:现在这也正常。我用(0)得到我的网络摄像头,用(1)得到错误,这绝对没问题。

0 个答案:

没有答案