1.HSV
HSV是一种颜色空间,它由色相(Hue)、饱和度(Saturation)和明度(Value)三个参数组成。HSV模型中,色相表示颜色的种类,饱和度表示颜色的纯度,明度表示颜色的亮度。HSV模型常用于图像处理领域,特别是在颜色识别和跟踪方面。
代码
import cv2
# 读取原图像
img = cv2.imread("example.jpg")
# 将RGB图像转换为HSV图像
img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# 显示原图像和HSV图像
cv2.imshow("Original Image", img)
cv2.imshow("HSV Image", img_hsv)
cv2.waitKey(0)
结果
2.HSL
HSL是一种颜色模型,它代表了颜色的三个属性:色相(Hue)、饱和度(Saturation)和亮度(Lightness)。其中,色相表示颜色的种类,饱和度表示颜色的纯度,亮度表示颜色的明暗程度。HSL模型通常用于图形软件中,用于调整和控制颜色的属性。
代码
import cv2
# 读取图像
img = cv2.imread(r'D:\papercode\experiment\2\deep-learning-for-image-processing-master\deep-learning-for-image-processing-master\amusement_0037.jpg')
# 将图像转换为HSL颜色空间
hsl_img = cv2.cvtColor(img, cv2.COLOR_BGR2HLS)
# 获取色相滑块的值
hue_value = 90
# 调整色相属性
hsl_img[:, :, 0] = hue_value
# 将图像转换回BGR颜色空间
result_img = cv2.cvtColor(hsl_img, cv2.COLOR_HLS2BGR)
# 显示结果图像
cv2.imshow('result', result_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
结果
3.HSI
HSI模型将亮度分量改为了强度(Intensity),并将饱和度分量改为了饱和度(Saturation)和色调(Intensity),这样可以更好地描述颜色的强度和鲜艳程度。
代码
import numpy as np
import cv2
def rgb2hsi(img):
# 将RGB图像转换为HSI图像
img = img.astype(np.float32) / 255.0
b, g, r = cv2.split(img)
hsi = np.zeros_like(img)
eps = 1e-6
for i, color in enumerate([b, g, r]):
numerator = 0.5 * ((r - g) + (r - b))
denominator = np.sqrt((r - g) ** 2 + (r - b) * (g - b))
theta = np.arccos(numerator / (denominator + eps))
h = np.zeros_like(theta)
h[color <= b] = theta[color <= b]
h[color > b] = 2 * np.pi - theta[color > b]
hsi[..., i] = h / (2 * np.pi)
hsi[..., 1] = 1 - 3 * np.min(hsi[..., :3], axis=-1)
hsi[..., 2] = np.sum(img, axis=-1) / 3.0
return hsi
def hsi2rgb(img):
# 将HSI图像转换为RGB图像
img = img.copy()
h, s, i = cv2.split(img)
h = h * 2 * np.pi
bgr = np.zeros_like(img)
for i, color in enumerate([bgr[..., 0], bgr[..., 1], bgr[..., 2]]):
if i == 0: # Blue
idx = np.logical_and(h >= 0, h < 2 * np.pi / 3)
color[idx] = i + (1 - s[idx])
idx = np.logical_and(h >= 2 * np.pi / 3, h < 4 * np.pi / 3)
color[idx] = i + (1 - s[idx]) * (h[idx] - 2 * np.pi / 3) / (2 * np.pi / 3)
idx = np.logical_and(h >= 4 * np.pi / 3, h < 2 * np.pi)
color[idx] = i + s[idx]
elif i == 1: # Green
idx = np.logical_and(h >= 0, h < 2 * np.pi / 3)
color[idx] = i + s[idx] * (h[idx]) / (2 * np.pi / 3)
idx = np.logical_and(h >= 2 * np.pi / 3, h < 4 * np.pi / 3)
color[idx] = i + (1 - s[idx])
idx = np.logical_and(h >= 4 * np.pi / 3, h < 2 * np.pi)
color[idx] = i + s[idx] * (2 * np.pi - h[idx]) / (2 * np.pi / 3)
else: # Red
idx = np.logical_and(h >= 0, h < 2 * np.pi / 3)
color[idx] = i + s[idx]
idx = np.logical_and(h >= 2 * np.pi / 3, h < 4 * np.pi / 3)
color[idx] = i + s[idx] * (4 * np.pi / 3 - h[idx]) / (2 * np.pi / 3)
idx = np.logical_and(h >= 4 * np.pi / 3, h < 2 * np.pi)
color[idx] = i + (1 - s[idx])
bgr[..., 0] = bgr[..., 0] * 255.0
bgr[..., 1] = bgr[..., 1] * 255.0
bgr[..., 2] = bgr[..., 2] * 255.0
return bgr.astype(np.uint8)
# 示例代码
img = cv2.imread('example.jpg')
hsi_img = rgb2hsi(img)
rgb_img = hsi2rgb(hsi_img)
cv2.imshow('Original Image', img)
cv2.imshow('HSI Image', hsi_img)
cv2.imshow('RGB Image', rgb_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
结果