我正在使用 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
你的做法似乎是正确的,但是众所周知,OpenCV 在执行此类操作时存在问题。您确定您的相机支持 160x140 吗?奶酪说我的相机支持160x120,但是当我选择这种格式时,似乎没有任何变化。
但有一件事是,最好始终检查 OpenCV 调用的返回,例如:
CvCapture *camera = cvCreateCameraCapture(1);
if (!camera)
{
// print error and exit
}
你可以做的一件事是resize将捕获的帧调整为您想要的分辨率。我知道这并不理想,您的 CPU 将执行此任务,因此您的应用程序将会有一些性能成本,但如果您需要图像具有一定的大小并且 OpenCV 运行得不好,那就没有太多了你可以这么做,除非你愿意在OpenCV上做手术。
EDIT:
您应该做的一件事是检查这些值是否确实设置。因此,在设置它们之后,用以下命令检索它们cvGetCaptureProperty()
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)