我正在使用OpenCV 2.4.5在Ubuntu 12.04 64位上。我想要能够设置我的Logitech C310网络摄像头的输入分辨率。该相机支持最高1280x960,30fps的视频,并且我可以在guvcview中以这种分辨率查看视频。但是OpenCV始终只获取640x480的视频。
在创建VideoCapture cap之后立即使用cap.set(CV_CAP_PROP_FRAME_WIDTH,1280)和cap.set(CV_CAP_PROP_FRAME_HEIGHT,960)尝试更改分辨率没有效果;在获取每个帧之前立即设置它们会导致程序立即崩溃。我也无法用此方法缩小分辨率。我还遇到了“HIGHGUI ERROR:V4L/V4L2:VIDIOC_S_CROP”的错误。我认为这可能与问题有关,因为它在创建VideoCapture时一次出现,在我尝试设置宽度和高度时再次出现(但奇怪的是,如果我只尝试设置其中一个,则不会出现)。
我知道我不是第一个遇到这个问题的人,但经过大量搜索Google、SO和其他互联网资源(我已经尝试过许多事情),我仍然没有找到解决方案(其中包括这个StackOverflow问题的答案:Increasing camera capture resolution in OpenCV)。这是OpenCV中的一个bug吗?如果是,那就太明显了。
下面给出了一个展示该问题的代码示例(仅是OpenCV视频显示代码的修改版):
#include <cv.h>
#include <highgui.h>
using namespace cv;
int main(int argc, char** argv)
{
VideoCapture cap(0); // open the default camera
if(!cap.isOpened()) // check if we succeeded
return -1;
cap.set(CV_CAP_PROP_FRAME_WIDTH, 160);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 120);
Mat image;
namedWindow("Video", CV_WINDOW_AUTOSIZE);
while(1)
{
// cap.set(CV_CAP_PROP_FRAME_WIDTH, 160);
// cap.set(CV_CAP_PROP_FRAME_HEIGHT, 120);
cap >> image;
imshow("Video", image);
if(waitKey(10) == 99 ) break;
}
return
}
目前情况是,我得到了两个" HIGHGUI ERROR "的错误提示,如上所述,并且输出为640x480。 我知道160x120是我的相机支持的一种分辨率,可以通过运行v4l2-ctl --list-formats-ext
来确认。如果我取消while循环中被注释掉的两行代码的注释,程序会立即崩溃。
以下链接可能与此相关或具有可能的解决方案:http://answers.opencv.org/question/11427/decreasing-capture-resolution-of-webcam/, http://answers.opencv.org/question/30062/error-setting-resolution-of-video-capture-device/