交换2个记忆位置

Jor*_*rdi 3 c++ optimization qt opencv

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

有更好的方法来做到以下几点?我想不出更快,但看起来如此简单和蹩脚......

    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);
Run Code Online (Sandbox Code Playgroud)

pho*_*tom 5

我们目前正在Qt应用程序中处理此问题.我们发现英特尔性能基元是最快的方法.他们有极其优化的代码.在英特尔ippiSwapChannels文档的html帮助文件中,他们有一个确切要求的示例.

有几个缺点

  1. 是库的大小,但您可以链接静态链接只是您需要的库例程.
  2. 在AMD cpus上运行.默认情况下,Intel libs运行速度非常慢.有关如何解决的详细信息,请访问www.agner.org/optimize/asmlib.zip.