gpt4 book ai didi

c++ - 交换 2 个内存位置

转载 作者:太空狗 更新时间:2023-10-29 19:41:12 36 4
gpt4 key购买 nike

我正在使用 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);

最佳答案

我们目前正在 Qt 应用程序中处理这个问题。我们发现 Intel Performance Primitives 是执行此操作的最快方法。他们有极其优化的代码。在 Intel ippiSwapChannels Documentation 处的 html 帮助文件中他们有一个正是您正在寻找的例子。

有几个缺点

  1. 是库的大小,但是你可以静态链接你需要的库例程。
  2. 在 AMD CPU 上运行。默认情况下,英特尔库在 AMD 上运行非常慢。查看 www.agner.org/optimize/asmlib.zip,了解有关如何解决的详细信息。

关于c++ - 交换 2 个内存位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2558839/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com