我正在做一个项目,其中涉及采取实时摄像机饲料,并显示在一个窗口上的用户。
由于相机图像默认情况下是错误的,我使用cvFlip(因此计算机屏幕就像一面镜子)翻转它,如下所示:
while (true)
{
IplImage currentImage = grabber.grab();
cvFlip(currentImage,currentImage, 1);
// Image then displayed here on the window.
}
这在大多数情况下工作得很好。然而,对于很多用户(主要是在速度更快的pc上)来说,摄像头的画面会剧烈地闪烁。基本上是显示一个未翻转的图像,然后是翻转的图像,然后是未翻转的图像,一遍又一遍。
所以我改变了一些东西来检测问题…
while (true)
{
IplImage currentImage = grabber.grab();
IplImage flippedImage = null;
cvFlip(currentImage,flippedImage, 1); // l-r = 90_degrees_steps_anti_clockwise
if(flippedImage == null)
{
System.out.println("The flipped image is null");
continue;
}
else
{
System.out.println("The flipped image isn't null");
continue;
}
}
翻转后的图像似乎总是返回null。为什么?我做错了什么?这快把我逼疯了。
如果这是cvFlip()的问题,还有什么其他方法来翻转IplImage?
感谢所有帮助我的人!
在存储结果之前,您需要将翻转的图像初始化为空图像而不是NULL。此外,您应该只创建映像一次,然后重新使用内存以提高效率。因此,更好的方法是像下面这样(未经测试):
IplImage current = null;
IplImage flipped = null;
while (true) {
current = grabber.grab();
// Initialise the flipped image once the source image information
// becomes available for the first time.
if (flipped == null) {
flipped = cvCreateImage(
current.cvSize(), current.depth(), current.nChannels()
);
}
cvFlip(current, flipped, 1);
}