我正在做一个项目,包括拍摄实时相机并将其显示在用户的窗口上。
由于默认情况下摄像机图像的方向是错误的,我使用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吗?
感谢任何帮助过的人!
答案 0 :(得分:1)
在将结果存储到其中之前,您需要使用空图像而不是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);
}