1

这是我问的最后一个问题的直接后续,该问题被恰当地命名为“C++:OpenCV2.3.1(!)访问网络摄像头参数”,并被告知安装 OpenCV2.4.11(OpenCV3.0 不起作用) ......我做到了。是的,大部分文本都是最后一个线程的精确复制和粘贴,因为我的问题实际上并没有消失......

同样,我在这里搜索过,在其他论坛(谷歌、OpenCV 等)上,查看了 videoInput 库的代码、不同的头文件,尤其是 OpenCV 的 highgui_c.h,但似乎仍然无法找到答案简单的问题:

如何以与使用 OpenCV2.1.0 相同的方式更改具有 OpenCV2.4.11 的 Logitech C310 网络摄像头的曝光和增益(或者,一般来说,任何网络摄像头属性)?(使用 Win7 64 位,Visual Studio 10)

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

我知道,有一个不错且简单的 VideoCapture 获取和设置方法,类似于 videoInput 的 [Set/Get]VideoSetting[Camera/Filter] 函数。这是我在 OpenCV2.4.11 中不起作用的简短示例:

编辑:它现在确实有效。我不明白的是,几个属性的值报告为-8.58993E+008(即色调、单色、伽马、温度、缩放、焦点、平移、倾斜、滚动和虹膜)和属性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 的图片)但它只打开一个漂亮的窗口,上面写着:
Item -4:0
Item -3:0
Item -2 : 0
...
项目 2: 0
项目 3: 640
项目 4: 480

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

编辑:见上文,这现在有效。我得到所有支持参数的值,如曝光、增益、锐度、亮度、对比度等。也许我仍在链接到 2.3.1 库或其他任何东西。

关键是:在 OpenCV 2.1.0 下,这台相机使用 videoInput 可以完美设置。我有一个正在运行的应用程序自己进行照明,而不是使用罗技功能(RightLight、自动曝光、自动白平衡)。现在设置和获取参数已经集成到 OpenCV highgui 中很长一段时间了,但功能列表大大减少(不请求参数范围,Min/Max/Stepwidth...,不设置自动曝光,RightLight 和类似的东西)由于某种原因,它与我的罗技网络摄像头不兼容。我可以报告解决方案,但不能报告其他内容。

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

videoInput 代码现在已合并到文件 cap_dshow.cpp 中的 OpenCV 代码中,但我找不到声明 videoInput 类的头文件,并且仅使用我的旧代码不起作用。所以我有一个 cpp 文件,其中包含我需要的所有功能,并且我知道它为我做了一段时间的工作,但我现在无法访问。关于如何做到这一点的任何线索?有没有人使用 videoInput/DirectShow 接口访问和更改 OpenCV2.4.11 中的相机参数?

编辑:与 2.3.1 不同,这似乎现在已经以一种可行的方式发生了。似乎不需要与 videoInput 直接交互。但是,由于上述原因,拥有它会很好。

还有一个有趣的问题是使用 eg

VideoCapture cam(0)

寻址完全相同的相机

VideoCapture cam(1)

或者

VideoCapture cam(any integer value)

这对我来说似乎很奇怪,并且暗示了相同的方向 - CV 的 VideoCapture 对我来说不能正常工作。这里描述了一个类似的问题,但我也在打开捕获后尝试了带有 Sleep(1000) 的代码 - 没有成功。

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

4

0 回答 0