我正在使用OpenCV和Qt,Opencv使用BGR而Qt使用RGB,因此我必须将这2个字节交换为非常大的图像。

有以下更好的方法吗?
我想不出什么来得更快,但看起来却如此simple脚...

    int width = iplImage->width;
 int height = iplImage->height;

 uchar *iplImagePtr = (uchar *) iplImage->imageData;
 uchar buf;
 int limit = height * width;

 for (int y = 0; y < limit; ++y) {
  buf = iplImagePtr[2];
  iplImagePtr[2] = iplImagePtr[0];
  iplImagePtr[0] = buf;
  iplImagePtr += 3;
 }

 QImage img((uchar *) iplImage->imageData, width, height,
     QImage::Format_RGB888);

最佳答案

我们目前正在Qt应用程序中处理此问题。我们发现,英特尔性能基元是最快的方法。他们有非常优化的代码。在Intel ippiSwapChannels Documentation的html帮助文件中,它们提供了您所确切查找的示例。

有几个缺点

  • 是库的大小,但是您可以仅链接所需的库例程来链接静态链接。
  • 在AMD cpus上运行。默认情况下,英特尔库在AMD上运行非常慢。请访问www.agner.org/optimize/asmlib.zip,了解有关解决方法的详细信息。
  • 07-25 20:33