几种颜色模型的转换公式
from: 幾種顏色模型的轉換公式
在做圖像處理時,我們一般采用的是RGB空間,但是在某些特殊情況下,我們也會用到其他的顏色空間。本文主要介紹一些常見的顏色空間的概念和轉換公式。
顏色的實質是一種光波。它的存在是因為有三個實體:光線、被觀察的對象以及觀察者。人眼是把顏色當作由被觀察對象吸收或者反射不同波長的光波形成的。例如,當在一個晴朗的日子里,我們看到陽光下的某物體呈現紅色時,那是因為該物體吸收了其它波長的光,而把紅色波長的光反射到我們人眼里的緣故。當然,我們人眼所能感受到的只是波長在可見光范圍內的光波信號。當各種不同波長的光信號一同進入我們的眼睛的某一點時,我們的視覺器官會將它們混合起來,作為一種顏色接受下來。同樣我們在對圖像進行顏色處理時,也要進行顏色的混合,但我們要遵循一定的規則,即我們是在不同顏色模式下對顏色進行處理的。
1.RGB顏色模式
雖然可見光的波長有一定的范圍,但我們在處理顏色時并不需要將每一種波長的顏色都單獨表示。因為自然界中所有的顏色都可以用紅、綠、藍(RGB)這三種顏色波長的不同強度組合而得,這就是人們常說的三基色原理。因此,這三種光常被人們稱為三基色或三原色。有時候我們亦稱這三種基色為添加色(Additive Colors),這是因為當我們把不同光的波長加到一起的時候,得到的將會是更加明亮的顏色。把三種基色交互重疊,就產生了次混合色:青(Cyan)、洋紅(Magenta)、黃(Yellow)。這同時也引出了互補色(Complement Colors)的概念。基色和次混合色是彼此的互補色,即彼此之間最不一樣的顏色。例如青色由藍色和綠色構成,而紅色是缺少的一種顏色,因此青色和紅色構成了彼此的互補色。在數字視頻中,對RGB三基色各進行8位編碼就構成了大約16.7萬種顏色,這就是我們常說的真彩色。順便提一句,電視機和計算機的監視器都是基于RGB顏色模式來創建其顏色的。
2.Lab顏色模式
Lab顏色是由RGB三基色轉換而來的,它是由RGB模式轉換為HSB模式和CMYK模式的橋梁。該顏色模式由一個發光率(Luminance)和兩個顏色(a,b)軸組成。它由顏色軸所構成的平面上的環形線來表示顏色的變化,其中徑向表示色飽和度的變化,自內向外,飽和度逐漸增高;圓周方向表示色調的變化,每個圓周形成一個色環;而不同的發光率表示不同的亮度并對應不同環形顏色變化線。它是一種具有“獨立于設備”的顏色模式,即不論使用任何一種監視器或者打印機,Lab的顏色不變。
RGB=>Lab
|X| |0.433910 0.376220 0.189860| |R/255| |Y| = |0.212649 0.715169 0.072182|*|G/255| |Z| |0.017756 0.109478 0.872915| |B/255|L = 116*Y1/3 for Y>0.008856 L = 903.3*Y for Y<=0.008856a = 500*(f(X)-f(Y)) b = 200*(f(Y)-f(Z)) 其中 f(t)=t1/3 for t>0.008856f(t)=7.787*t+16/116 for t<=0.0088563.HSB顏色模式
從心理學的角度來看,顏色有三個要素:色澤(Hue)、飽和度(Saturation)和亮度(Brightness)。HSB顏色模式便是基于人對顏色的心理感受的一種顏色模式。它是由RGB三基色轉換為Lab模式,再在Lab模式的基礎上考慮了人對顏色的心理感受這一因素而轉換成的。因此這種顏色模式比較符合人的視覺感受,讓人覺得更加直觀一些。它可由底與底對接的兩個圓錐體立體模型來表示,其中軸向表示亮度,自上而下由白變黑;徑向表示色飽和度,自內向外逐漸變高;而圓周方向,則表示色調的變化,形成色環。
RGB=>HSB
V=max(R,G,B) S=(V-min(R,G,B))*255/V if V!=0, 0 otherwise(G - B)*60/S, if V=R H= 180+(B - R)*60/S, if V=G240+(R - G)*60/S, if V=B若 H<0,則 H=H+360使用上面從 0° 到 360° 變化的公式計算色調( hue)值,確保它們被 2 除后能試用于8位。
4.YUV顏色模式
這是電視系統中常用的顏色模式,即電視中所謂的分量(Component)信號。該模式由一個亮度信號Y和兩個色差信號U、V組成。它是利用了人眼對亮度信號敏感而對色度信號相對不敏感的特點,將RGB顏色通過亮度信號公式Y=039R+050G+011B轉換為一個亮度信號Y和兩個色差分量信號U(R-Y)、V(B-Y),即對色差信號進行了頻帶壓縮。毫無疑問,這是以犧牲信號的質量為代價的。
RGB<=>YUV Y = 0.299R + 0.587G + 0.114B U = -0.147R - 0.289G + 0.436B V = 0.615R - 0.515G - 0.100BR = Y + 1.14V G = Y - 0.39U - 0.58V B = Y + 2.03U5.CMYK顏色模式
這是彩色印刷使用的一種顏色模式。它由青(Cyan)、洋紅(Magenta)、黃(Yellow)和黑(Black)四種顏色組成。其中黑色之所以用K來表示,是為避免和RGB三基色中的藍色(Blue,用B表示)發生混淆。該種模式的創建基礎和RGB不同,它不是靠增加光線,而是靠減去光線,因為和監視器或者電視機不同的是,打印紙不能創建光源,它不會發射光線,只能吸收和反射光線。因此通過對上述四種顏色的組合,便可以產生可見光譜中的絕大部分顏色了。
RGB<=CMYK
?? R = (255 - C) * ((255 - K) / 255)
??? G = (255 - M) * ((255 - K) / 255)
??? B = (255 - Y) * ((255 - K) / 255)
6.部分程序code
void HSI2RGB(BYTE &BR,BYTE &BG,BYTE &BB,BYTE BH,BYTE BS,BYTE BI)
{
int nHValue = static_cast<int>(BH);
int nSValue = static_cast<int>(BS);
int nLValue = static_cast<int>(BI);
float fHAngle = ((float)nHValue ) / 255 * 360;
float H = fHAngle / 180 * PI;
float S = ((float)nSValue ) / 100;
float I = ((float)nLValue ) / 100;
float R = -1;
float G = -1;
float B = -1;
if(fHAngle >= 0 && fHAngle < 120)
{
? B = I * ( 1.0 - S );
? R = I * ( 1.0 + ( S * cos( H ) / cos( 60.0 / 180 * PI - H ) ) );
? G = 3.0 * I - ( B + R );
}
else if(fHAngle >= 120 && fHAngle < 240)
{
? R = I * ( 1.0 - S );
? G = I * ( 1.0 + S * cos( H - 120.0 / 180 * PI ) / cos( 180.0 / 180 * PI - H )? );
? B = 3.0 * I - ( R + G );
}
else if(fHAngle >= 240 && fHAngle < 360)
{
? G = I * ( 1.0 - S );
? B = I * ( 1.0 + S * cos( H - 240.0 / 180 * PI ) / cos( 300.0 / 180 * PI - H ) );
? R = 3.0 * I - ( G + B );
}
int R_value_in_rgb = R * 255;
int G_value_in_rgb = G * 255;
int B_value_in_rgb = B * 255;
BR = static_cast<BYTE>(R_value_in_rgb);
BG = static_cast<BYTE>(G_value_in_rgb);
BB = static_cast<BYTE>(B_value_in_rgb);
}
void? RGB2HSI(BYTE r,BYTE g,BYTE b,BYTE &h,BYTE &s,BYTE &i)
{
short m_fr = static_cast<short>(r);
short m_fg = static_cast<short>(g);
short m_fb = static_cast<short>(b);
float m_fiR = static_cast<float>(m_fr) / 255;
float m_fsG = static_cast<float>(m_fg) / 255;
float m_fhB = static_cast<float>(m_fb) / 255;
?
if( m_fr == m_fg && m_fg == m_fb)
{
? int iHValue = 0;
? int iSValue = 0;
? int iLValue = ((float)m_fr)/ 255 * 100;
? h = static_cast<BYTE>(iHValue);
? s = static_cast<BYTE>(iSValue);
? i = static_cast<BYTE>(iLValue);?
? return;
}
float max_value_of_rgb = GetMax( m_fiR, m_fsG, m_fhB );
float min_value_of_rgb = GetMin( m_fiR, m_fsG, m_fhB );
float fSumRGB =m_fiR + m_fsG + m_fhB ;
if( fSumRGB <= 0.0 )
? fSumRGB = 0.001;
float I = (m_fiR + m_fsG + m_fhB) / 3;
float S = 1.0 - 3.0 * min_value_of_rgb / fSumRGB;
float H = acos( (( m_fiR - m_fsG ) + ( m_fiR - m_fhB ))/2 / sqrt( ( m_fiR - m_fsG )*( m_fiR - m_fsG ) + ( m_fiR -m_fhB ) * ( m_fsG - m_fhB)? + 0.0001 ) );
float fHAngle = H / PI * 180;
if( m_fsG < m_fhB )
? fHAngle = 360 - fHAngle;
if( fHAngle > 360.0 )
? fHAngle = 360.0;
int nHValue = fHAngle / 360 * 255;
int nSValue = S * 100;
int nLValue = I * 100;
h = nHValue;
s = nSValue;
i = nLValue;
}
?
先來了解一些概念:
1.RGB是一種加色模型,就是將不同比例的Red/Green/Blue混合在一起得到新顏色.通常RGB顏色模型表示為:
2.HSB(HSV) 通過色相/飽和度/亮度三要素來表達顏色.
? H(Hue):表示顏色的類型(例如紅色,綠色或者黃色).取值范圍為0—360.其中每一個值代表一種顏色.
? S(Saturation):顏色的飽和度.從0到1.有時候也稱為純度.(0表示灰度圖,1表示純的顏色)
? B(Brightness or Value):顏色的明亮程度.從0到1.(0表示黑色,1表示特定飽和度的顏色)
?
后面地址是一個在線的觀察RGB到HSB轉換的工具:http://web.bentley.edu/empl/c/ncarter/MA307/color-converter.html
用RGB來表示顏色雖然方便,但是兩個相近的顏色的RGB值卻可能相差十萬八千里。用HSV(Hue色相、Saturation飽和度、Value(Brightness)明度,也叫HSB)來表示顏色就比較符合人們的習慣。
RGB到HSV(HSB)的轉換:
HSV(HSB)到RGB的轉換:
根據以上說明,有以下轉換公式(Java代碼):
[java] view plaincopy
?
?
?
幾種顏色模型的轉換公式
XYZ —> RGB
var_X = X / 100??????? //X from 0 to? 95.047????
var_Y = Y / 100??????? //Y from 0 to 100.000
var_Z = Z / 100??????? //Z from 0 to 108.883
var_R = var_X *? 3.2406 + var_Y * -1.5372 + var_Z * -0.4986
var_G = var_X * -0.9689 + var_Y *? 1.8758 + var_Z *? 0.0415
var_B = var_X *? 0.0557 + var_Y * -0.2040 + var_Z *? 1.0570
if ( var_R > 0.0031308 ) var_R = 1.055 * ( var_R ^ ( 1 / 2.4 ) ) - 0.055
else???????????????????? var_R = 12.92 * var_R
if ( var_G > 0.0031308 ) var_G = 1.055 * ( var_G ^ ( 1 / 2.4 ) ) - 0.055
else???????????????????? var_G = 12.92 * var_G
if ( var_B > 0.0031308 ) var_B = 1.055 * ( var_B ^ ( 1 / 2.4 ) ) - 0.055
else???????????????????? var_B = 12.92 * var_B
R = var_R * 255
G = var_G * 255
B = var_B * 255
RGB —> XYZ
var_R = ( R / 255 )??????? //R from 0 to 255
var_G = ( G / 255 )??????? //G from 0 to 255
var_B = ( B / 255 )??????? //B from 0 to 255
if ( var_R > 0.04045 ) var_R = ( ( var_R + 0.055 ) / 1.055 ) ^ 2.4
else?????????????????? var_R = var_R / 12.92
if ( var_G > 0.04045 ) var_G = ( ( var_G + 0.055 ) / 1.055 ) ^ 2.4
else?????????????????? var_G = var_G / 12.92
if ( var_B > 0.04045 ) var_B = ( ( var_B + 0.055 ) / 1.055 ) ^ 2.4
else?????????????????? var_B = var_B / 12.92
var_R = var_R * 100
var_G = var_G * 100
var_B = var_B * 100
X = var_R * 0.4124 + var_G * 0.3576 + var_B * 0.1805
Y = var_R * 0.2126 + var_G * 0.7152 + var_B * 0.0722
Z = var_R * 0.0193 + var_G * 0.1192 + var_B * 0.9505
XYZ —> Yxy
//X from 0 to 95.047??????
//Y from 0 to 100.000
//Z from 0 to 108.883
Y = Y
x = X / ( X + Y +Z )
y = Y / ( X + Y +Z )
Yxy —> XYZ
//Y from 0 to 100
//x from 0 to 1
//y from 0 to 1
X = x * ( Y / y )
Y = Y
Z = ( 1 - x - y ) * ( Y / y )
XYZ —> Hunter-Lab
(H)L = 10 * sqrt( Y )
(H)a = 17.5 * ( ( ( 1.02 * X ) - Y ) / sqrt(Y ) )
(H)b = 7 * ( ( Y - ( 0.847 * Z ) ) / sqrt(Y ) )
Hunter-Lab —> XYZ
var_Y = (H)L / 10
var_X = (H)a / 17.5 * (H)L / 10
var_Z = (H)b / 7 * (H)L / 10
Y = var_Y ^ 2
X = ( var_X + Y ) / 1.02
Z = -( var_Z - Y ) / 0.847
XYZ —> CIE-L*ab
var_X = X / ref_X????????? //ref_X =? 95.047?
var_Y = Y / ref_Y????????? //ref_Y = 100.000
var_Z = Z / ref_Z????????? //ref_Z = 108.883
if ( var_X > 0.008856 ) var_X = var_X ^ ( 1/3 )
else??????????????????? var_X = ( 7.787 * var_X ) + ( 16 / 116 )
if ( var_Y > 0.008856 ) var_Y = var_Y ^ ( 1/3 )
else??????????????????? var_Y = ( 7.787 * var_Y ) + ( 16 / 116 )
if ( var_Z > 0.008856 ) var_Z = var_Z ^ ( 1/3 )
else??????????????????? var_Z = ( 7.787 * var_Z ) + ( 16 / 116 )
CIE-L* = ( 116 * var_Y ) - 16
CIE-a* = 500 * ( var_X - var_Y )
CIE-b* = 200 * ( var_Y - var_Z )
CIE-L*ab —> XYZ
var_Y = ( CIE-L* + 16 ) / 116
var_X = CIE-a* / 500 + var_Y
var_Z = var_Y - CIE-b* / 200
if ( var_Y^3 > 0.008856 ) var_Y = var_Y^3
else????????????????????? var_Y = ( var_Y - 16 / 116 ) / 7.787
if ( var_X^3 > 0.008856 ) var_X = var_X^3
else????????????????????? var_X = ( var_X - 16 / 116 ) / 7.787
if ( var_Z^3 > 0.008856 ) var_Z = var_Z^3
else????????????????????? var_Z = ( var_Z - 16 / 116 ) / 7.787
X = ref_X * var_X???? //ref_X =? 95.047????
Y = ref_Y * var_Y???? //ref_Y = 100.000
Z = ref_Z * var_Z???? //ref_Z = 108.883
CIE-L*ab —> CIE-L*CH°
var_H = arc_tangent( CIE-b*, CIE-a* )? //Quadrant by signs
if ( var_H > 0 ) var_H = ( var_H / PI ) * 180
else???????????? var_H = 360 - ( abs( var_H ) / PI ) * 180
CIE-L* = CIE-L*
CIE-C* = sqrt( CIE-a* ^ 2 + CIE-b* ^ 2 )
CIE-H° = var_H
CIE-L*CH° —>CIE-L*ab
//CIE-H° from 0 to 360°
CIE-L* = CIE-L*
CIE-a* = cos( degree_2_radian( CIE-H° ) ) *CIE-C*
CIE-b* = sin( degree_2_radian( CIE-H° ) ) *CIE-C*
XYZ —> CIE-L*uv
var_U = ( 4 * X ) / ( X + ( 15 * Y ) + ( 3 * Z ) )
var_V = ( 9 * Y ) / ( X + ( 15 * Y ) + ( 3 *Z ) )
var_Y = Y / 100
if ( var_Y > 0.008856 ) var_Y = var_Y ^ ( 1/3 )
else??????????????????? var_Y = ( 7.787 * var_Y ) + ( 16 / 116 )
ref_X =? 95.047????
ref_Y = 100.000
ref_Z = 108.883
ref_U = ( 4 * ref_X ) / ( ref_X + ( 15 * ref_Y ) + ( 3 * ref_Z ) )
ref_V = ( 9 * ref_Y ) / ( ref_X + ( 15 * ref_Y ) + ( 3 * ref_Z ) )
CIE-L* = ( 116 * var_Y ) - 16
CIE-u* = 13 * CIE-L* * ( var_U - ref_U )
CIE-v* = 13 * CIE-L* * ( var_V - ref_V )
CIE-L*uv —> XYZ
var_Y = ( CIE-L* + 16 ) / 116
if ( var_Y^3 > 0.008856 ) var_Y = var_Y^3
else????????????????????? var_Y = ( var_Y - 16 / 116 ) / 7.787
ref_X =? 95.047???
ref_Y = 100.000
ref_Z = 108.883
ref_U = ( 4 * ref_X ) / ( ref_X + ( 15 * ref_Y ) + ( 3 * ref_Z ) )
ref_V = ( 9 * ref_Y ) / ( ref_X + ( 15 * ref_Y ) + ( 3 * ref_Z ) )
var_U = CIE-u* / ( 13 * CIE-L* ) + ref_U
var_V = CIE-v* / ( 13 * CIE-L* ) + ref_V
Y = var_Y * 100
X =? - ( 9 * Y * var_U ) / ( ( var_U - 4 ) * var_V? - var_U * var_V )
Z = ( 9 * Y - ( 15 * var_V * Y ) - ( var_V * X ) ) / ( 3 * var_V )
RGB —> HSL
var_R = ( R / 255 )???????????????????? //RGB from 0 to 255
var_G = ( G / 255 )
var_B = ( B / 255 )
var_Min = min( var_R, var_G, var_B )??? //Min. value of RGB
var_Max = max( var_R, var_G, var_B )??? //Max. value of RGB
del_Max = var_Max - var_Min???????????? //Delta RGB value
L = ( var_Max + var_Min ) / 2
if ( del_Max == 0 )???????????????????? //This is a gray, no chroma...
{
?? H = 0??????????????????????????????? //HSL results from 0 to 1
?? S = 0
}
else??????????????????????????????????? //Chromatic data...
{
?? if ( L < 0.5 ) S = del_Max / ( var_Max + var_Min )
?? else?????????? S = del_Max / ( 2 - var_Max - var_Min )
?? del_R = ( ( ( var_Max - var_R ) / 6 ) + ( del_Max / 2 ) ) / del_Max
?? del_G = ( ( ( var_Max - var_G ) / 6 ) + ( del_Max / 2 ) ) / del_Max
?? del_B = ( ( ( var_Max - var_B ) / 6 ) + ( del_Max / 2 ) ) / del_Max
?? if????? ( var_R == var_Max ) H = del_B - del_G
?? else if ( var_G == var_Max ) H = ( 1 / 3 ) + del_R - del_B
?? else if ( var_B == var_Max ) H = ( 2 / 3 ) + del_G - del_R
?? if ( H < 0 ) ; H += 1
?? if ( H > 1 ) ; H -= 1
}
HSL —> RGB
if ( S == 0 )??????????????????????//HSL from 0 to 1
{
?? R = L * 255????????????????????? //RGB results from 0 to 255
?? G = L * 255
?? B = L * 255
}
else
{
?? if ( L < 0.5 ) var_2 = L * ( 1 + S )
?? else?????????? var_2 = ( L + S ) - ( S * L )
?? var_1 = 2 * L - var_2
?? R = 255 * Hue_2_RGB( var_1, var_2, H + ( 1 / 3 ) )
?? G = 255 * Hue_2_RGB( var_1, var_2, H )
?? B = 255 * Hue_2_RGB( var_1, var_2, H - ( 1 / 3 ) )
}
Hue_2_RGB( v1, v2, vH )???????????? //Function Hue_2_RGB
{
?? if ( vH < 0 ) vH += 1
?? if ( vH > 1 ) vH -= 1
?? if ( ( 6 * vH ) < 1 ) return ( v1 + ( v2 - v1 ) * 6 * vH )
?? if ( ( 2 * vH ) < 1 ) return ( v2 )
?? if ( ( 3 * vH ) < 2 ) return ( v1 + ( v2 - v1 ) * ( ( 2 / 3 ) - vH ) * 6 )
?? return ( v1 )
}
RGB —> HSV
var_R = ( R / 255 )???????????????????? //RGB from 0 to 255
var_G = ( G / 255 )
var_B = ( B / 255 )
var_Min = min( var_R, var_G, var_B )??? //Min. value of RGB
var_Max = max( var_R, var_G, var_B )??? //Max. value of RGB
del_Max = var_Max - var_Min???????????? //Delta RGB value
V = var_Max
if ( del_Max == 0 )???????????????????? //This is a gray, no chroma...
{
?? H = 0??????????????????????????????? //HSV results from 0 to 1
?? S = 0
}
else??????????????????????????????????? //Chromatic data...
{
?? S = del_Max / var_Max
?? del_R = ( ( ( var_Max - var_R ) / 6 ) + ( del_Max / 2 ) ) / del_Max
?? del_G = ( ( ( var_Max - var_G ) / 6 ) + ( del_Max / 2 ) ) / del_Max
?? del_B = ( ( ( var_Max - var_B ) / 6 ) + ( del_Max / 2 ) ) / del_Max
?? if????? ( var_R == var_Max ) H = del_B - del_G
?? else if ( var_G == var_Max ) H = ( 1 / 3 ) + del_R - del_B
?? else if ( var_B == var_Max ) H = ( 2 / 3 ) + del_G - del_R
?? if ( H < 0 ) ; H += 1
?? if ( H > 1 ) ; H -= 1
}
HSV —> RGB
if ( S == 0 )?????????????????????? //HSV from 0 to 1
{
?? R = V * 255
?? G = V * 255
?? B = V * 255
}
else
{
?? var_h = H * 6
?? if ( var_h == 6 ) var_h = 0????? //H must be < 1
?? var_i = int( var_h )???????????? //Or ... var_i = floor( var_h )
?? var_1 = V * ( 1 - S )
?? var_2 = V * ( 1 - S * ( var_h - var_i ) )
?? var_3 = V * ( 1 - S * ( 1 - ( var_h - var_i ) ) )
?? if????? ( var_i == 0 ) { var_r = V???? ; var_g = var_3 ; var_b = var_1 }
?? else if ( var_i == 1 ) { var_r = var_2 ; var_g = V???? ; var_b = var_1 }
?? else if ( var_i == 2 ) { var_r = var_1 ; var_g = V???? ; var_b = var_3 }
?? else if ( var_i == 3 ) { var_r = var_1 ; var_g = var_2 ; var_b = V???}
?? else if ( var_i == 4 ) { var_r = var_3 ; var_g = var_1 ; var_b = V???}
?? else?????????????????? { var_r = V???? ; var_g = var_1 ; var_b = var_2 }
?? R = var_r * 255????????????????? //RGB results from 0 to 255
?? G = var_g * 255
?? B = var_b * 255
}
RGB —> CMY
//RGB values from 0 to 255
//CMY results from 0 to 1
C = 1 - ( R / 255 )
M = 1 - ( G / 255 )
Y = 1 - ( B / 255 )
CMY —> RGB
//CMY values from 0 to 1
//RGB results from 0 to 255
R = ( 1 - C ) * 255
G = ( 1 - M ) * 255
B = ( 1 - Y ) * 255
CMY —> CMYK
//CMYK and CMY values from 0 to 1
var_K = 1
if ( C < var_K )?? var_K = C
if ( M < var_K )?? var_K = M
if ( Y < var_K )?? var_K = Y
if ( var_K == 1 ) { //Black
?? C = 0
?? M = 0
?? Y = 0
}
else {
?? C = ( C - var_K ) / ( 1 - var_K )
?? M = ( M - var_K ) / ( 1 - var_K )
?? Y = ( Y - var_K ) / ( 1 - var_K )
}
K = var_K
CMYK —> CMY
//CMYK and CMY values from 0 to 1
C = ( C * ( 1 - K ) +K )
M = ( M * ( 1 - K ) + K )
Y = ( Y * ( 1 - K ) + K )
總結
以上是生活随笔為你收集整理的几种颜色模型的转换公式的全部內容,希望文章能夠幫你解決所遇到的問題。

- 上一篇: 基于改进的RPCA人脸识别算法
- 下一篇: ADAS辅助驾驶_自动驾驶_技术点列表