2011-12-01 144 views
2

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

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 
+0

相机是否支持该分辨率?它是否以不同的分辨率工作? – LiMuBei

+0

@李慕贝是的。在奶酪相机设置中,有5种不同的相机分辨率。 –

+0

但是,当你设置它们时它们是否工作? – karlphillip

回答

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()检索它们。

+0

我无法调整大小...我的处理器是vortex86DX,使用率达到85%,我无法获取每秒超过18帧的图像(没有算法应用于图像!)。 –

+0

在这种情况下,请准备好让自己的手变脏并挖掘OpenCV。 – karlphillip

+0

也许@mevatron对此有话要说。新人,在OpenCV上精力充沛,可能会在OpenCV之前获得银牌。 – karlphillip