当前位置:  开发笔记 > 编程语言 > 正文

降低OpenCV中的图像分辨率

如何解决《降低OpenCV中的图像分辨率》经验,为你挑选了1个好方法。

我正在使用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

karlphillip.. 6

你似乎正在以正确的方式做到这一点,但OpenCV众所周知有这样的问题.你确定你的相机支持160x140吗?奶酪说我的相机支持160x120,但是当我选择这种格式时似乎没有任何改变.

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

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

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

编辑:

你应该做的一件事是检查这些值是否真的设置好了.所以在设置之后,用它们检索它们cvGetCaptureProperty().



1> karlphillip..:

你似乎正在以正确的方式做到这一点,但OpenCV众所周知有这样的问题.你确定你的相机支持160x140吗?奶酪说我的相机支持160x120,但是当我选择这种格式时似乎没有任何改变.

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

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

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

编辑:

你应该做的一件事是检查这些值是否真的设置好了.所以在设置之后,用它们检索它们cvGetCaptureProperty().

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有