python3OpenCV3 использует матрицу для реализации RGB в HSI
Я видел, что в Интернете есть много блогов, которые выполняют операции RGB в HSI через обход цикла, но мы знаем, что параллельные операции с использованием массивов Numpy в python могут быть более краткими и быстрыми.
- код показывает, как показано ниже
import cv2
import numpy as np
import sys
In_path = "BGR.jpg"
img = cv2.imread(In_path)
img = cv2.resize(img,(400,300))
line, cols, chl = img.shape
img = img.astype(np.float32)
img_bgr = img.copy()/255
b,g,r = cv2.split(img_bgr)
Tdata = np.where((2*np.sqrt((r-g)**2+(r-b)*(g-b))) != 0,np.arccos((2*r-b-g)/(2*np.sqrt((r-g)**2+(r-b)*(g-b)))),0)
Hdata = np.where(g >= b,Tdata,2*3.1415926-Tdata)
Hdata = Hdata / (2*3.1415926)
Sdata = np.where((b+g+r) != 0, 1 - 3*np.minimum(b,g,r)/(b+g+r),0)
Idata = (b+g+r)/3
img_hsi = np.zeros((300,400,3))
img_hsi[:,:,0] = Hdata*255
img_hsi[:,:,1] = Sdata*255
img_hsi[:,:,2] = Idata*255
img_hsi = np.array(img_hsi)
print(img_hsi.shape)
print(img.shape)
while(True):
cv2.imshow('rgb_lwpImg', img.astype(np.uint8))
cv2.imshow('hsi_lwpImg', img_hsi.astype(np.uint8))
cv2.imwrite("BGR_deal2.jpg",img_hsi.astype(np.uint8))
if(cv2.waitKey(1000//12) & 0xff == ord("q")):
break
cv2.destroyAllWindows()
- Результат показан на рисунке