降低OpenCV中的图像分辨率

时间:2011-12-01 09:31:52

标签: c++ qt opencv resolution

我使用OpenCV从A4Tech相机中捕捉图像。当我尝试降低图像分辨率时,图像断言失败:

CvCapture *camera = cvCreateCameraCapture(1); // 0 is index of Laptop integrated camera
cvSetCaptureProperty( camera, CV_CAP_PROP_FRAME_WIDTH, 160 );
cvSetCaptureProperty( camera, CV_CAP_PROP_FRAME_HEIGHT, 140 );
assert(camera); // This is passed
while(true)
{
    // ....
    IplImage * image=cvQueryFrame(camera);
    assert(image); // This fails. (Line 71 is here)
    // ....
}

输出是:

HIGHGUI ERROR: V4L: Initial Capture Error: Unable to load initial memory buffers.
udpits: main.cpp:71: int main(int, char**): Assertion `image' failed.
Aborted

1 个答案:

答案 0 :(得分:6)

你似乎是以正确的方式做到了,但OpenCV is known to have issues doing this kind of stuff。你确定你的相机支持160x140吗?奶酪说我的相机支持 160x120 ,但是当我选择这种格式时似乎没有任何改变。

但有一点,最好始终检查OpenCV调用的返回,例如:

CvCapture *camera = cvCreateCameraCapture(1);
if (!camera)
{
    // print error and exit
}

您可以做的一件事是resize捕获的帧到您想要的分辨率。我知道,这不是理想的,你的CPU将会执行这项任务,因此你的应用程序会有一些性能成本,但是如果你需要一个特定大小的图像并且OpenCV不是很好玩,那么它并不多你可以这样做,除非你愿意在OpenCV上做手术。

修改

您应该做的一件事是检查这些值是否真的设置好了。因此,在设置它们之后,使用cvGetCaptureProperty()检索它们。