2013-03-13 112 views
2

我剛開始使用SS2圖像處理優化,但對於3通道24位彩色圖像不知道。 我的pix數據由BGR BGR BGR ...,unsigned char 8-bi排列,所以如果我想用SSE2/SSE3/SSE4的C/C++指令來實現Color2Gray,我該怎麼辦?是否需要爲我的pix數據對齊(4/8/16)? 我已閱讀文章:http://supercomputingblog.com/windows/image-processing-with-sse/ 但是它是ARGB 4通道32位色彩,每次處理4色圖像數據。 謝謝!如何使用SSE2/SSE3/SSE4處理24位3通道彩色圖像?

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

回答

2

下面是一些解答你的問題:

5

我有de-interleaving of 24-bit RGB pixels幻燈片,解釋如何與SSE2和SSSE3做到這一點。

+0

是的,謝謝你。我已經完成了顏色RGB ... RGB到RR ... BB ... GG,但是當我嘗試使:RGB-> Gray:Y = 0.212671 * R + 0.715160 * G + 0.072169 * B。有問題。由於SSE使用128位,因此沒有SSE C/C++指令可以工作,如:_mm_mul_xxx(a0,b0); r0 = a0 * b0,r1 = a1 * b0,...,r15 = a15 * b0; (a0是16個uchar類型,b0是2個雙重類型)。 ???? – user2163635 2013-03-17 04:11:47

+0

對於顏色轉換,通常使用定點算術代替浮點。將8位值解包爲16位值(使用_mm_unpacklo_epi8/_mm_unpackhi_epi8),然後使用16位值的整數乘法。 – 2013-03-18 00:03:39

相關問題