2012-12-24 95 views
0

我有位圖和JPEG圖像。我將不得不從圖像中獲取所有像素的RGB值。請建議一種從圖像文件中檢索RGB值的方法。如果在C.使用C編程將RGB圖像轉換爲YUV

+1

是不是libjpeg不夠好? – 2012-12-24 07:54:32

回答

1

可以解析和使用libJPEG從JPEG得到位圖 - 這是在「RGB」很簡單

假設你有和RGB bimap的。結果將被放置在'yuv420p'向量中。

void rgb2yuv420p(std::vector<BYTE>& rgb, std::vector<BYTE>& yuv420p) 
{ 
    unsigned int i = 0; 
    unsigned int numpixels = width * height; 
    unsigned int ui = numpixels; 
    unsigned int vi = numpixels + numpixels/4; 
    unsigned int s = 0; 

#define sR (BYTE)(rgb[s+2]) 
#define sG (BYTE)(rgb[s+1]) 
#define sB (BYTE)(rgb[s+0]) 

    yuv420p.resize(numpixels * 3/2); 

    for (int j = 0; j < height; j++) 
    for (int k = 0; k < width; k++) 
    { 
     yuv420p[i] = (BYTE)((66*sR + 129*sG + 25*sB + 128) >> 8) + 16; 

     if (0 == j%2 && 0 == k%2) 
     { 
     yuv420p[ui++] = (BYTE)((-38*sR - 74*sG + 112*sB + 128) >> 8) + 128; 
     yuv420p[vi++] = (BYTE)((112*sR - 94*sG - 18*sB + 128) >> 8) + 128; 
     } 
     i++; 
     s += colors; 
    } 
} 
0

任何可用的功能。如果你想這個做自己我會讚賞,這裏是德維基百科的文章,我從當我做這個工作的工作,大約一年回: http://en.wikipedia.org/wiki/YUV

這也是相當不錯的: http://www.fourcc.org/fccyvrgb.php

但更容易的是jpeglib - 這不是我的情況下的選擇,因爲數據不是在第一個位置的jpeg。