【问题标题】:Decrease image resolution in OpenCV降低 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 种不同的分辨率。
  • 但是当你设置它们时它们会起作用吗?
  • 是的,它们在奶酪中工作正常。

标签: c++ qt opencv resolution


【解决方案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 的银牌。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 2016-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多