關于轉換原理參照http://blog.sina.com.cn/s/blog_6c41e2f30100xusj.html
import cv2
import numpy as np
img=cv2.imread('C:/Users/53121/Desktop/IMAGE/road.jpg')
#BGR轉HSI,得到的HSI三通道取值範圍都在0到1之間
def BGR2HSI(bgr_img):
bgr=bgr_img.copy()
B,G,R=cv2.split(bgr/)
hsi_img=bgr.copy()/
H,S,I=cv2.split(hsi_img)
h,w=B.shape
for i in range(h):
for j in range(w):
bgr_min=min(B[i,j],G[i,j],R[i,j])
bgr_sum=B[i,j]+G[i,j]+R[i,j]
I[i,j]=bgr_sum/
S[i,j]=-*bgr_min/bgr_sum
cov=(R[i,j]-G[i,j])+(R[i,j]-B[i,j])
var=*np.sqrt((R[i,j]-G[i,j])**+(R[i,j]-B[i,j])*(G[i,j]-B[i,j])**)
theta=np.arccos(cov/var)
if G[i,j]>=B[i,j]:
H[i,j]=theta/(*np.pi)
else:
H[i,j]=(*np.pi-theta)/(*np.pi)
hsi_img[:,:,]=H
hsi_img[:,:,]=S
hsi_img[:,:,]=I
return hsi_img
#HSI轉BGR,得到的BGR三通道取值範圍都在0到1之間
def HSI2BGR(hsi_img):
hsi=hsi_img.copy()
H,S,I=cv2.split(hsi)
bgr_img=hsi_img.copy()
B,G,R=cv2.split(bgr_img)
h,w=B.shape
for i in range(h):
for j in range(w):
if S[i,j]<e-:
R[i,j]=I[i,j]
G[i,j]=I[i,j]
B[i,j]=I[i,j]
else:
H[i,j]*=
if H[i,j]> and H[i,j]<=:
B[i,j]=(-S[i,j])*I[i,j]
sigma=(H[i,j]-)*np.pi/
temp=np.tan(sigma)/np.sqrt()
G[i,j]=(+*temp)*I[i,j]-(.+*temp)*B[i,j]
R[i,j]=*I[i,j]-G[i,j]-B[i,j]
elif H[i,j]> and H[i,j]<=:
R[i,j]=(-S[i,j])*I[i,j]
sigma=(H[i,j]-)*np.pi/
temp=np.tan(sigma)/np.sqrt()
B[i,j]=(+*temp)*I[i,j]-(.+*temp)*R[i,j]
G[i,j]=*I[i,j]-R[i,j]-B[i,j]
elif H[i,j]> and H[i,j]<=:
G[i,j]=(-S[i,j])*I[i,j]
sigma=(H[i,j]-)*np.pi/
temp=np.tan(sigma)/np.sqrt()
R[i,j]=(+*temp)*I[i,j]-(.+*temp)*G[i,j]
B[i,j]=*I[i,j]-G[i,j]-R[i,j]
bgr_img[:,:,]=B
bgr_img[:,:,]=G
bgr_img[:,:,]=R
return bgr_img
hsi=BRG2HSI(img)
bgr=HSI2BGR(hsi)