【问题标题】:How to process a 24-bit 3 channel color image with SSE2/SSE3/SSE4?如何使用 SSE2/SSE3/SSE4 处理 24 位 3 通道彩色图像?
【发布时间】:2013-02-28 21:13:06
【问题描述】:

我刚开始使用SS2优化图像处理,但是对于3通道24位彩色图像却一无所知。 我的像素数据由 BGR BGR BGR ... ,unsigned char 8-bi 排列,所以如果我想用 SSE2/SSE3/SSE4 的指令 C/C++ fun 实现 Color2Gray,我该怎么办?我的像素数据需要对齐(4/8/16)吗? 我看过文章:http://supercomputingblog.com/windows/image-processing-with-sse/ 但它是 ARGB 4 通道 32 位颜色,每次准确处理 4 个颜色像素数据。 谢谢!

//Assume the original pixel:
      unsigned char* pDataColor=(unsigned char*)malloc(src.width*src.height*3);//3

  //init pDataColor every pix val
  // The dst pixel:
  unsigned char* pDataGray=(unsigned char*)malloc(src.width*src.height*1);//1 

//RGB->灰色:Y=0.212671*R + 0.715160*G + 0.072169*B

【问题讨论】:

    标签: optimization opencv image-processing instructions sse2


    【解决方案1】:

    我在de-interleaving of 24-bit RGB pixels 上有幻灯片,其中解释了如何使用 SSE2 和 SSSE3。

    【讨论】:

    • 是的,谢谢。我已经完成了颜色 RGB...RGB 到 RR...BB...GG,但是当我尝试制作时:RGB->灰色:Y=0.212671* R + 0.715160*G + 0.072169*B 。有问题。由于 SSE 使用 128 位,因此没有 SSE C/C++ 指令 fun 可以像这样工作:_mm_mul_xxx(a0,b0);r0=a0*b0,r1=a1*b0,...,r15=a15*b0; (a0 是 16 种 uchar 类型,b0 是 2 种双精度类型)。 ??????
    • 对于颜色转换,通常使用定点算法而不是浮点数。将 8 位值解包为 16 位值(使用 _mm_unpacklo_epi8/_mm_unpackhi_epi8),然后使用 16 位值的整数乘法。
    【解决方案2】:

    以下是您问题的一些答案:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-09
      相关资源
      最近更新 更多