cvFlip()闪烁或返回null

时间:2013-02-27 12:29:35

标签: java opencv camera javacv iplimage

我正在做一个项目,包括拍摄实时相机并将其显示在用户的窗口上。

由于默认情况下摄像机图像的方向是错误的,我使用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吗?

感谢任何帮助过的人!

1 个答案:

答案 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);
}