目录
HSL和HSV
简介
HSL和HSV都是一种将RGB色彩模型中的点在圆柱坐标系中的表示法。这两种表示法试图做到比基于笛卡尔坐标系的几何结构RGB更加直观。HSL(HSI)即色相、饱和度、亮度(英语:Hue, Saturation, Lightness(Intensity))。HSV(HSB)即色相、饱和度、明度(英语:Hue, Saturation, Value(Brightness))。
**色相(H)**是色彩的基本属性,就是平常所说的颜色名称,如红色、黄色等。
**饱和度(S)**是指色彩的纯度,越高色彩越纯,低则逐渐变灰,取0-100%的数值。
明度(V),亮度(L),取0-100%。HSL和HSV二者都把颜色描述在圆柱坐标系内的点,这个圆柱的中心轴取值为自底部的黑色到顶部的白色而在它们中间的是灰色,绕这个轴的角度对应于“色相”,到这个轴的距离对应于“饱和度”,而沿着这个轴的高度对应于“亮度”、“色调”或“明度”。
对比
为了更为直观的对比我们可以直接观察3D模型的变化
3D模型
HSL在L轴向上延申的同时亮度越来越高,颜色更趋近于纯净的白色。
HSV在V轴向上延申的同时明度越来越高,颜色更为明亮、饱和。
RGB与HSL HSV相互转换
RGB->HSL HSV
设 (r, g, b)分别是一个颜色的红、绿和蓝坐标,它们的值是在0到1之间的实数。设max等价于r, g和b中的最大值。设min等于这些值中的最小者。要找到在HSL空间中的 (h, s, l)值,这里的h ∈ [0, 360)度是角度的色相角,而s, l ∈ [0,1]是饱和度和亮度,计算为:
HSL->RGB
给定HSL空间中的 (h, s, l)值定义的一个颜色,带有h在指示色相角度的值域[0, 360]中,分别表示饱和度和亮度的s和l在值域[0, 1]中,相应在RGB空间中的 (r, g, b)三原色,带有分别对应于红色、绿色和蓝色的r, g和b也在值域[0, 1]中,它们可计算为:
首先,如果s = 0,则结果的颜色是非彩色的、或灰色的。在这个特殊情况,r, g和b都等于l。注意h的值在这种情况下是未定义的。
当s ≠ 0的时候,可以使用下列过程:
HSV->RGB
类似的,给定在HSV中 (h, s, v)值定义的一个颜色,带有如上的变化于0到360之间的h,和分别表示饱和度和明度的变化于0到1之间的s和v,在RGB空间中对应的 (r, g, b)三原色可以计算为(R,G,B变化于0到1之间):
一、图片颜色转换
1.转换为灰度图
#使用opencv
import cv2
import numpy as np
source_path="D:\myworkspace\bmp\hutao.png"
#取灰度图片
cv_read=cv2.imread(source_path,0)
cv2.imshow('huidu',cv_read)
cv2.waitKey(0)
#不使用opencv
from PIL import Image
I = Image.open('D:\myworkspace\hutao.png')
I.show()
L = I.convert('L')
L.show()
2.转化为HSV HSL
HSV
import cv2 as cv
image = cv.imread('hutao.png')
hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV)
# 显示图片
cv.imshow('hsv', hsv