我们正式的来看一下这些代码原理的实现,这么多循迹的运用就是没有人写,真鸡儿过分。
闲话不多说,先放个转换色彩空间的代码来看看:
代码语言:javascript复制# Python3 program change RGB Color
# Model to HSV Color Model
def rgb_to_hsv(r, g, b):
# R, G, B values are divided by 255
# to change the range from 0..255 to 0..1:
r, g, b = r / 255.0, g / 255.0, b / 255.0
# h, s, v = hue, saturation, value
cmax = max(r, g, b) # maximum of r, g, b
cmin = min(r, g, b) # minimum of r, g, b
diff = cmax-cmin # diff of cmax and cmin.
# if cmax and cmax are equal then h = 0
if cmax == cmin:
h = 0
# if cmax equal r then compute h
elif cmax == r:
h = (60 * ((g - b) / diff) 360) % 360
# if cmax equal g then compute h
elif cmax == g:
h = (60 * ((b - r) / diff) 120) % 360
# if cmax equal b then compute h
elif cmax == b:
h = (60 * ((r - g) / diff) 240) % 360
# if cmax equal zero
if cmax == 0:
s = 0
else:
s = (diff / cmax) * 100
# compute v
v = cmax * 100
return h, s, v
print(rgb_to_hsv(0, 51, 238))
作用是RGB空间转到HSV的空间
一开始的计算过程很简单
#R、G、B值除以255
#更改范围从0.255到0.1。有点像归一化的意思,当然也可以写一下关于归一化的通式是什么样子的:
代码语言:javascript复制n-min
-----
max-min
中间的横杠是除号,假装是除号。。。
- 设 (r, g, b) 分别是一个颜色的红、绿和蓝坐标,它们的值是在 0 到 1 之间的实数
- 设 max 等于 r, g, b 中的最大者
- 设 min 等于 r, g, b 中的最小者
转换公式
也可以看这个,都是一样的
代码语言:javascript复制 r, g, b = r / 255.0, g / 255.0, b / 255.0
cmax = max(r, g, b) # maximum of r, g, b
cmin = min(r, g, b) # minimum of r, g, b
diff = cmax-cmin # diff of cmax and cmin.
if cmax == cmin:
h = 0
elif cmax == r:
h = (60 * ((g - b) / diff) 360) % 360
elif cmax == g:
h = (60 * ((b - r) / diff) 120) % 360
elif cmax == b:
h = (60 * ((r - g) / diff) 240) % 360
if cmax == 0:
s = 0
else:
s = (diff / cmax) * 100
v = cmax * 100
具体的转换公式就是这样
代码语言:javascript复制https://ww2.mathworks.cn/help/matlab/ref/rgb2hsv.html
对于一个理科狗来说,MATLAB嘤嘤嘤
代码语言:javascript复制HSV = rgb2hsv(RGB)
hsvmap = rgb2hsv(rgbmap)
这个是语法
具体用法是:
示
代码语言:javascript复制将 RGB 图像的红色、绿色和蓝色值转换为 HSV 图像的色调、饱和度和明度 (HSV) 值。
启动!
代码语言:javascript复制>> rgb = prism(6)
rgb =
1.0000 0 0
1.0000 0.5000 0
1.0000 1.0000 0
0 1.0000 0
0 0 1.0000
0.6667 0 1.0000
代码语言:javascript复制>> hsv = rgb2hsv(rgb)
hsv =
0 1.0000 1.0000
0.0833 1.0000 1.0000
0.1667 1.0000 1.0000
0.3333 1.0000 1.0000
0.6667 1.0000 1.0000
0.7778 1.0000 1.0000
先直接转换一下看看结果
再转回去也得说一下,不想敲代码的可以,可以在MATLAB里面输入以下的一串东西:
代码语言:javascript复制openExample('graphics/Hsv2RgbColormapExample')
代码语言:javascript复制hsv = [.6 1 1; .6 .7 1; .6 .5 1; .6 .3 1; .6 0 1];
代码语言:javascript复制rgb = hsv2rgb(hsv);
surf(peaks);
colormap(rgb);
colorbar
代码语言:javascript复制C:UsersCY-306DocumentsMATLABExamplesgraphics
这些例子可以在计算机的这个位置找到