程式碼網址:
https://www.dropbox.com/s/tuzv4jrvhj2m8hw/ColorModel.cpp?dl=0
此次作業主要是做RGBtoYUV以及YUVtoRGB的色彩值轉換
為什麼要轉換成YUV呢?
Y = 亮度
UV = 彩度
如果想改變圖片色彩,使用RGB模型每會因為三種色彩資訊裡包含灰階而很容易修改到亮度。
因此才採用YUV模型,維持原本色彩的亮度Y,並修改想要的色彩值UV。
p.s. RGB灰階值 = R+G+B/3
此圖為YUV模型色彩,{Y=128, U=0-255, V=0-255}並轉換為RGB輸出
下方為轉換公式:
[{ 1, -0.00093, 1.401687}, [ Y-0, [ R,
{ 1, -0.3437, -0.71417 }, X U-128, = G,
{ 1, 1.77216, 0.00099 }] V-128 ] B ]
YUV轉換成RGB色彩值輸出值須介於0-255
故大於255則設為255、小於0則設為0
此圖為選擇模型顏色轉換後結果
選色的方法:
TColor SelectedColor =
this
->ImageModelYUV->Picture->Bitmap->Canvas->Pixels[X][Y];
this
->ImageSelected->Canvas->Brush->Color = SelectedColor;
this
->ImageSelected->Canvas->FillRect(Rect(0,0,ImageSelected->Width,ImageSelected->Height));
到Bitmap->Canvas->Pixel[X][Y],Pixel回傳值為TColor,因此宣告一個TColor存放顏色
並填滿一個Image就可以知道選到什麼顏色了。
為了將圖形轉換成想要的圖片色彩又不失亮度的資訊
1.將圖片Pixel的RGB轉換成YUV => 可以得到Pixel的亮度Y(這個值是我們要保留的)
2.將選擇的色彩RGB轉換成YUV => 可以得到色彩的彩度UV,取代步驟1.的UV即可
3.將YUV( Y=步驟1.的Y, U=步驟2.的U, V=步驟2.的V )轉換成RGB,在輸出到Image元件就完成了。
上三個步驟去對圖片每個Pixel重複做,就可以只輸出單一色調了。
{ Y = 255, U = 0-255, V = 0-255 } { R = 0-255, G = 0-255, B =0 }
{ R = 0, G = 0-255, B = 0-255 }
{ R = 0-255, G = 0, B =0-255 }
沒有留言:
張貼留言