如何处理与SSE2 / SSE3 / SSE4一个24位的3信道的彩色图像?(How to proc

2019-07-21 11:25发布

我刚开始使用图像处理的SS2优化,但对于三通道24位彩色图像不知道。 通过BGR BGR BGR ...安排我的PIX的数据,无符号的字符8-BI,所以如果我想与SSE2 / SSE3 / SSE4的指令C / C ++的乐趣实施Color2Gray,我会怎么做? 是否需要对齐(4/8/16)对我的PIX的数据? 我已读的文章: http://supercomputingblog.com/windows/image-processing-with-sse/但它是ARGB 4信道的32位颜色,恰好处理每次4点色PIX的数据。 谢谢!

//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

Answer 1:

我在玻片上的24位RGB像素解交织 ,这解释了如何使用SSE2和SSSE3做到这一点。



Answer 2:

下面是一些回答你的问题:

  • 对于如何使用SSE2指令的C / C ++函数。 这些引用可能会有所帮助。
    • 图像处理算法的优化:一个案例研究
    • 加快一些SSE2内部函数将颜色变换
    • 上证所内部函数参考
  • 对于定位:是的,16字节对齐是必要的。 当有内存访问使用SSE2固有职能(SSE2 / SSE3 / SSE4指令C / C ++函数),你应该确保的内存地址是16字节对齐。 如果您使用的MSVC,你将不得不使用declspec(对齐(16)) ,或与海湾合作委员会,这将是__attribute((排列(16))) 。
    • 之所以对齐是必要的可以在这里找到: 为什么指令/数据比对存在吗?
  • 对于3路RGB转换,我不是一个图像处理的专家,所以不能给出建议。 也有可能已经包含了你想要的代码一些开源图像处理库。


文章来源: How to process a 24-bit 3 channel color image with SSE2/SSE3/SSE4?