cvFlip()闪烁或返回null



我正在做一个项目,其中涉及采取实时摄像机饲料,并显示在一个窗口上的用户。

由于相机图像默认情况下是错误的,我使用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);
}

相关内容

  • 没有找到相关文章