【学习 OpenCV】—— 色彩空间(RGB、HSV、rgb2hsv、rgb2gray 的实现)

RGB 色彩空间的基础是对叠加型三原色(红绿蓝)的应用。之所以选择它们,是因为把它们组合起来后可以产生色域很宽(256*256*256)的各种颜色。实际上,人类的视觉系统( Human visual system,HVS)也是基于对三原色的感知,因为视锥细胞的灵敏度位于红绿蓝的光谱周围。这通常是数字成像中默认的色彩空间,因为这就是人类看数字图像的方式。

但是,利用 RGB 色彩空间计算颜色之间的差距,并不是衡量两个颜色相似度(similarity)的最好方式。RGB 并不是感知均匀的色彩空间。也就是说,两种具有一定差距的颜色可能看起来非常接近,而另外两种具有同样差距的颜色看起来却差别很大。

未解决这个问题,引入了一些具有感知均匀特性的颜色表示法。CIEL*a*b* 就是一种这样的颜色模型。把图像转换到这种表示法后,我们就可以真正地使用图像像素与目标颜色之间的欧氏距离,来度量颜色之间的视觉相似度。

0. rgb2gray 的实现

def rgb2gray(rgb):
    return np.dot(rgb[..., :3], [0.299, 0.587, 0.144])

1. rgb2hsv

HSV,H:hue,S:saturation,V:value

  • [0, 255] ⇒ [0, 1],也即将原始的 rgb 3 通道上的 256 级灰度值,线性压缩在 0-1 区间内;
    • R=R/255 G=G/255 B=B/255
  • Cmax=max(R,G,B) Cmin=min(R,G,B) Δ=CmaxCmin

此时便可以计算 hsv 了:

H=0°,60°(GBΔmod6),60°(BRΔ+2),60°(RGΔ+4),Δ=0R=CmaxG=CmaxB=Cmax,S=0,ΔCmax,Cmax=0Cmax0,V=Cmax

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五道口纳什

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值