【发布时间】:2013-04-12 03:34:58
【问题描述】:
我正在尝试在 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编解码器。
【问题讨论】:
-
如果你想设置fps(必须相机支持),你必须在编解码器设置之后,但在宽度/高度设置之前进行
-
听起来您的 EDIT2 以 30fps 的速度为您提供了 1080p。应该变成答案并被接受,以使问题看起来已解决。