我正在尝试在 OpenCV 中从我的 Logitech C920 捕获视频流。使用 Labview,我可以访问 30fps 1080p 的 MJPG 流。在 opencv 中,我被限制为 5fps 或 640x480。
这是与相机设置相关的代码:
this->camRef.set(CV_CAP_PROP_FRAME_WIDTH, 1920);
this->camRef.set(CV_CAP_PROP_FRAME_HEIGHT, 1080);
this->camRef.set(CV_CAP_PROP_FOURCC,CV_FOURCC('M','J','P','G'));
这些都返回 1,但我得到了一个 1080p 的 5fps 流,它对应于 YUY2 流。
如果我添加以下行:
this->camRef.set(CV_CAP_PROP_FPS, 30);
这将返回 0。我在 640x480 处获得了 30 fps 的流。对我来说,看起来 MJPG 设置不被接受,但我不知道该怎么做或如何解决这个问题。
编辑:以下使程序崩溃。
this->camRef.read(this->image);
std::cout<< this->camRef.get(CV_CAP_PROP_FOURCC) << std::endl;
std::cout<< this->camRef.set(CV_CAP_PROP_FRAME_WIDTH, config.width) << std::endl;
std::cout<< this->camRef.set(CV_CAP_PROP_FRAME_HEIGHT, config.height) << std::endl;
std::cout<< this->camRef.set(CV_CAP_PROP_FOURCC,CV_FOURCC('M','J','P','G')) << std::endl;
std::cout<< this->camRef.get(CV_CAP_PROP_FOURCC) << std::endl;
然后在我的运行代码中,我有以下内容:
void camera::run()
{
while(true)
{
if(this->camRef.read(this->image) == 0)
{
if(this->capture)
{
cv::imwrite(fileName,this->image);
this->count++;
}
}
msleep(15);
}
}
EDIT2:解决方案是在设置相机高度和宽度之前设置fourCC编解码器。