0

我正在做一个项目,其中涉及拍摄实时摄像头并将其显示在用户的窗口上。

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

感谢任何帮助的人!

4

1 回答 1

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);
}
于 2013-02-28T06:06:57.950 回答