# -*- coding: utf-8 -*-
# @FileName: 将原始图像转换到HSI颜色空间
# @Software: PyCharm
# @Author : changli Xu
# @Time :2020//11//21
import numpy as np
import cv2
import math
def rgb2hsi(rgb_img):
"""
将图片从RGB色彩空间转为HSI色彩空间
Args:
rgb_img: 采用RGB色彩空间的图片
Returns:
转化为HSI色彩空间的图片.
"""
rows = int(rgb_img.shape[0])
cols = int(rgb_img.shape[1])
B, G, R = cv2.split(rgb_img)
# 将图片的RGB分量分别归一化到[0,1]的范围
B = B / 255
G = G / 255
R = R / 255
hsi_img = rgb_img.copy()
H, S, I = cv2.split(hsi_img)
for i in range(rows):
for j in range(cols):
num = 0.5 * ((R[i, j] - G[i, j]) + (R[i, j] - B[i, j]))
den = np.sqrt((R[i, j] - G[i, j]) ** 2 + (R[i, j] - B[i, j]) * (G[i, j] - B[i, j]))
if den == 0:
H = 0
elif B[i, j] <= G[i, j]:
theta = float(np.arccos(num / den))
H = theta
else:
theta = float(np.arccos(num / den))
H = 2 * math.pi - theta
min_RGB = min(min(B[i, j], G[i, j]), R[i, j])
sum = B[i, j] + G[i, j] + R[i, j]
if sum == 0:
S = 0
else:
S = 1 - 3 * min_RGB / sum
H = H / (2 * math.pi)
I = sum / 3
# 输出HSI图像,扩充到[0, 255]范围方便显示,一般H分量在[0, 2*pi]之间,S和I在[0, 1]之间
hsi_img[i, j, 0] = H * 255
hsi_img[i, j, 1] = S * 255
hsi_img[i, j, 2] = I * 255
return hsi_img
if __name__ == '__main__':
img = cv2.imread(r'C:\Users\Administrator\Desktop\image\datasetHcenter\1.jpg')
hsi_img = rgb2hsi(img)
cv2.imshow('HSI', hsi_img)
cv2.waitKey(0)
将原始图像转换到HSI颜色空间
最新推荐文章于 2022-06-01 09:31:03 发布