【问题标题】:Faster conversion of BGR packed to RGB planar pixel format将 BGR 打包到 RGB 平面像素格式的更快转换
【发布时间】:2023-04-09 08:11:02
【问题描述】:

从 SDK 中,我得到了像素格式 BGR 打包的图像,即BGRBGRBGR。对于另一个应用程序,我需要将此格式转换为 RGB 平面 RRRGGGBBB

我正在使用 C# .NET 4.5 32 位,数据位于具有相同大小的字节数组中。

现在我正在遍历数组源并将BGR 值分配给目标数组中的适当位置,但这需要太长时间(1.3 百万像素图像需要 180 毫秒)。运行代码的处理器可以访问 MMX、SSE、SSE2、SSE3、SSSE3。

有没有办法加快转换速度?

编辑:这是我正在使用的转换:

// the array with the BGRBGRBGR pixel data
byte[] source;
// the array with the RRRGGGBBB pixel data
byte[] result;
// the amount of pixels in one channel, width*height
int imageSize;

for (int i = 0; i < source.Length; i += 3)
{
    result[i/3] = source[i + 2]; // R
    result[i/3 + imageSize] = source[i + 1]; // G
    result[i/3 + imageSize * 2] = source[i]; // B
}

编辑:我尝试将源数组的访问分成三个循环,每个通道一个,但它并没有真正帮助。所以我愿意接受建议。

for (int i = 0; i < source.Length; i += 3)
{
    result[i/3] = source[i + 2]; // R
}

for (int i = 0; i < source.Length; i += 3)
{
    result[i/3 + imageSize] = source[i + 1]; // G
}

for (int i = 0; i < source.Length; i += 3)
{
    result[i/3 + imageSize * 2] = source[i]; // B
}

顶一下,因为这个问题仍然没有答案。任何建议都非常感谢!

【问题讨论】:

  • 当原始转换不可用时,任何人都很难看到是否可以进行更快的转换
  • 请显示一些您当前方法的代码
  • 投票重新开放。说真的,他不是要图书馆。即使给出了代码,我也可以通过重写它看到几种方法来加速它 - 显着地 - 。在没有第三方库的情况下,在 .NET 框架/Visual Studio 标准生态系统中有有效的答案。
  • 为了记录,我 vtc'ed 因为没有代码示例就不清楚。投票重新开放
  • 我真的很想听听你的想法,TomTom。但显然,让问题回到主题上是不会发生的?

标签: c# image-processing intrinsics pixelformat


【解决方案1】:

您可以尝试使用 SSE3 的 PSHUFB - Packed Shuffle Bytes 指令。确保您使用对齐的内存读/写。您将不得不做一些棘手的事情来处理每个 XMMWORD 大小的块中的最后一个悬空 B 值。可能很难做到正确,但应该是一个巨大的加速。您还可以查找库代码。我猜你需要制作一个 C 或 C++ DLL 并使用 P/Invoke,但也许有一种方法可以使用我不知道的 C# 中的 SSE 指令。

edit - this question 是针对稍微不同的问题,ARGB 到 BGR,但使用的技术与您需要的技术相似。

【讨论】:

  • 感谢您的帮助,但不幸的是,我缺乏关于内在函数的知识,因此代码对我没有多大帮助,并且仅使用库来完成这个小任务是不可能的。
【解决方案2】:

Basler 公司为其相机提供了一个 SDK,称为 Basler Pylon,可在 Windows 和 Linux 中运行。
此 SDK 包含适用于 C++、C# 等的 API。
它有一个图像转换类PixelDataConverter,这似乎是你所需要的。

【讨论】:

    猜你喜欢
    • 2015-02-16
    • 2021-06-08
    • 1970-01-01
    • 1970-01-01
    • 2018-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-11
    相关资源
    最近更新 更多