前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RGB转换HSV色彩空间(Python+MATLAB实现)

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

作者头像
云深无际
发布2021-06-25 15:26:58
2.3K0
发布2021-06-25 15:26:58
举报
文章被收录于专栏:云深之无迹

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

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

代码语言: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:\Users\CY-306\Documents\MATLAB\Examples\graphics

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-05-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云深之无迹 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档