我正在使用 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 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()
检索它们。
关于c++ - 降低 OpenCV 中的图像分辨率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8339077/