我正在使用 Logitech C920 和 OpenCV 开发一个小型网络摄像头应用程序。
实际上,我可以从相机获取图像,对于给定的分辨率没有任何问题。但除了框架宽度和高度之外,我无法访问相机中的任何设置。我有以下代码。正如您所猜测的,该代码生成了除前两行之外的所有零行。
难道我做错了什么?或者这是罗技的另一个专有 BS?如果这是 OpenCV 的限制,是否还有其他选项可以在 Windows 操作系统中为此网络摄像头开发应用程序?
m_cam.open(0);
if(!m_cam.isOpened() ) // check if we succeeded
{
std::cerr << "ERROR: Could not open cameras." << std::endl;
return;
}
int ex = static_cast<int>(m_cam.get(CV_CAP_PROP_FOURCC));
char EXT[] = {ex & 0XFF , (ex & 0XFF00) >> 8,(ex & 0XFF0000) >> 16,(ex & 0XFF000000) >> 24, 0};
m_cam.set(CV_CAP_PROP_FOURCC,CV_FOURCC('H','2','6','4'));
m_cam.set(CV_CAP_PROP_FRAME_WIDTH,1280);//2304);//1829//1200//800
m_cam.set(CV_CAP_PROP_FRAME_HEIGHT,720);//1536); //1080//800//600
m_cam.set(CV_CAP_PROP_FPS, 30);
//m_cam.set(CV_CAP_PROP_EXPOSURE,0);
std::cout<< m_cam.get(CV_CAP_PROP_FRAME_WIDTH) << std::endl;
std::cout<< m_cam.get(CV_CAP_PROP_FRAME_HEIGHT) << std::endl;
std::cout<< m_cam.get(CV_CAP_PROP_FPS) << std::endl;
std::cout<< m_cam.get(CV_CAP_PROP_EXPOSURE) << std::endl;
std::cout<< m_cam.get(CV_CAP_PROP_FORMAT) << std::endl;
std::cout<< m_cam.get(CV_CAP_PROP_CONTRAST) << std::endl;
std::cout<< m_cam.get(CV_CAP_PROP_BRIGHTNESS) << std::endl;
std::cout<< m_cam.get(CV_CAP_PROP_SATURATION) << std::endl;
std::cout<< m_cam.get(CV_CAP_PROP_HUE) << std::endl;
std::cout<< m_cam.get(CV_CAP_PROP_POS_FRAMES) << std::endl;
安装 dshow 和 ffmpeg 后通过重建 OpenCV 修复了该问题。我现在甚至可以设置一些值,例如帧速率,但相机按指定工作似乎是一个单独的问题。就我而言,在设置分辨率而不设置帧速率后,相机分辨率变为 640 x 480。尽管我的计算机安装了 H264 解码器,但使用 OpenCV 时 1920 x 1080 会产生 5-7 fps。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)