我正在使用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()
.
你似乎正在以正确的方式做到这一点,但OpenCV众所周知有这样的问题.你确定你的相机支持160x140吗?奶酪说我的相机支持160x120,但是当我选择这种格式时似乎没有任何改变.
但有一点,最好始终检查OpenCV调用的返回,例如:
CvCapture *camera = cvCreateCameraCapture(1); if (!camera) { // print error and exit }
您可以做的一件事是将捕获的帧大小调整为您想要的分辨率.我知道,这不是理想的,你的CPU将会执行这项任务,因此你的应用程序会有一些性能成本,但是如果你需要一个特定大小的图像并且OpenCV不是很好,那么就没有多少你可以这样做,除非你愿意在OpenCV上做手术.
编辑:
你应该做的一件事是检查这些值是否真的设置好了.所以在设置之后,用它们检索它们cvGetCaptureProperty()
.