降低 OpenCV 中的图像分辨率

Posted

技术标签:

【中文标题】降低 OpenCV 中的图像分辨率【英文标题】:Decrease image resolution in OpenCV 【发布时间】:2011-12-01 09:31:51 【问题描述】:

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

【问题讨论】:

相机是否支持该分辨率?它是否适用于不同的分辨率? @LiMuBei 是的。在 Cheese 相机设置中,相机有 5 种不同的分辨率。 但是当你设置它们时它们会起作用吗? 是的,它们在奶酪中工作正常。 【参考方案1】:

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

但有一件事,最好总是检查 OpenCV 调用的返回,例如:

CvCapture *camera = cvCreateCameraCapture(1);
if (!camera)

    // print error and exit

您可以做的一件事是resize 将捕获的帧设置为您想要的分辨率。这并不理想,我知道,您的 CPU 将执行此任务,因此您的应用程序会有一些性能成本,但是如果您需要图像具有一定的大小并且 OpenCV 的播放效果不佳,那就没什么了你可以这样做,除非你愿意在 OpenCV 上做手术。

编辑:

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

【讨论】:

我无法调整大小...我的处理器是 vortex86DX,使用率为 85%,我每秒无法获取超过 18 帧(图像上没有应用任何算法!)。 在这种情况下,准备动手并深入研究 OpenCV。 也许@mevatron 对此有话要说。新人,在 OpenCV 上非常有活力,可能会在我之前获得 OpenCV 的银牌。

以上是关于降低 OpenCV 中的图像分辨率的主要内容,如果未能解决你的问题,请参考以下文章

opencv 图像金字塔(python)

为啥在 OpenCv 中调整图像大小会降低相机校准的重投影误差?

OpenCV学习笔记12-图像金字塔的原理及代码实现

图像金字塔高斯金字塔拉普拉斯金字塔是怎么回事?附利用拉普拉斯金字塔和高斯金字塔重构原图的Python-OpenCV代码

youcans 的 OpenCV 例程200篇185.图像金字塔之高斯金字塔

youcans 的 OpenCV 例程200篇186.图像金字塔之拉普拉斯金字塔