RGB转换HSV色彩空间(Python+MATLAB实现)

2021-06-25 15:26:58 浏览数 (1)

我们正式的来看一下这些代码原理的实现,这么多循迹的运用就是没有人写,真鸡儿过分。

闲话不多说,先放个转换色彩空间的代码来看看:

代码语言: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

这些例子可以在计算机的这个位置找到

0 人点赞