)###顯示原圖
def
rgb2hsi
(rgb_img)
: row = np.shape(rgb_img)[0
] col = np.shape(rgb_img)[1
]#對原始影象進行複製
hsi_img = rgb_img.copy(
)#對影象進行通道拆分
b,g,r = cv2.split(rgb_img)
#把通道歸一化到[0,1]
[b,g,r]
=[ i/
255.0
for i in
([b,g,r])]
###利用rgb轉換hsi顏色空間的公式操作
h = np.zeros(
(row, col)
)#定義h通道
i =(r + g + b)
/3.0
#計算i通道
s = np.zeros(
(row,col)
)#定義s通道
for i in
range
(row)
: den = np.sqrt(
(r[i]
-g[i])**
2+(r[i]
-b[i])*
(g[i]
-b[i]))
thetha = np.arccos(
0.5*
(r[i]
-b[i]
+r[i]
-g[i]
)/den)
#計算夾角
h = np.zeros(col)
#定義臨時陣列
#den>0且g>=b的元素h賦值為thetha
h[b[i]
<=g[i]
]= thetha[b[i]
<=g[i]
]#den>0且g<=b的元素h賦值為thetha
h[g[i]
2*np.pi-thetha[g[i]
]#den<0的元素h賦值為0
h[den ==0]
=0h[i]
= h/(2
*np.pi)
#弧度化後賦值給h通道
#計算s通道
for i in
range
(row)
:min=[
]#找出每組rgb值的最小值
for j in
range
(col)
: arr =
[b[i]
[j],g[i]
[j],r[i]
[j]]
minmin
(arr)
)min
= np.array(
min)
#計算s通道
s[i]=1
-min*3
/(r[i]
+b[i]
+g[i]
)#i為0的值直接賦值0
s[i]
[r[i]
+b[i]
+g[i]==0
]=0#擴充到255以方便顯示,一般h分量在[0,2pi]之間,s和i在[0,1]之間
hsi_img[:,
:,0]
= h*
255 hsi_img[:,
:,1]
= s*
255 hsi_img[:,
:,2]
= i*
255return hsi_img
###顯示hsi顏色空間下的
HSI顏色空間和RGB顏色空間之間的相互轉換
具體的數學公式參照岡薩雷斯版 數字影象處理 第三版 432 434頁,中譯版的260 261頁。下面貼 1 include opencv libs.h 2 include 3 include 4 include 56 7 描述 實現rgb顏色模型到hsi顏色模型之間的相互轉換89 10 1112 將...
RGB顏色空間轉LAB
第一 lab顏色空間簡介 lab是由乙個亮度通道 channel 和兩個顏色通道組成的。在lab顏色空間中,每個顏色用l a b三個數字表示,各個分量的含義是這樣的 第二 為什麼使用lab顏色空間 因為它是一種裝置無關的顏色系統,也是一種基於生理特徵的顏色系統。它所描述的顏色空間就是人眼的視覺感應。...
RGB與HSI空間相互轉換
void hsitrans char tp else else if mn r else if mn g myhsiarray i mypwidth j h calchue angle,col1,col2,mn myhsiarray i mypwidth j s 255.0 float mx mn ...