图像处理:图像HSV通道的取值范围官方计算公式及代码实现

一 疑问

最近在做相关图片通道从RGB转到HSV时一直存在疑问?在网上找的计算公式都是说:
色调H:0°~360°;
饱和度S:0.0~1.0;
亮度V:0.0~1.0。
但计算公式中:V=max(R,G,B),那V的范围应该是0~255才对啊,怎么会是0-1呢?
另外,OpenCV给出的范围分别如下,怎么和计算公式的范围又不一样呢?
H: 0 — 180
S: 0 — 255
V: 0 — 255
下面就来一一解答上面两个疑问

二 解答

疑问一:V的范围到底是0~255,还是0-1呢?

国内网站上很多博主给出的计算公式其实是不全的,如果你查查OpenCV的官网就会发现,标准计算公式中一开始是把RGB三通道进行了归一化,也就是将R、G、B的值分别归一化到0–1的范围,正确的计算公式如下:
在这里插入图片描述
所以V的取值范围是0–1

疑问二:OpenCV给出的范围为什么和计算公式不一样?

其实,计算公式的后面已经给出了答案,OpenCV中图片存储的深度是8位整数的,0-255之间,所以对计算公式的结果又进行了变换,使HSV的范围在0~255之间。为什么H通道的0-180呢?因为计算公式中H的范围已经在0-360了,所以直接除以了2,使范围缩小在0-180之间就行了。

三 Python代码实现RGB转HSV

from cv2 import cv2
import numpy as np
img0 = cv2.imread('2.jpg')
hsv_img = cv2.cvtColor(img0, cv2.COLOR_BGR2HSV)
h,s,v = cv2.split(hsv_img) #这是OpenCV给出的范围

'''转换为计算公式给出的范围'''
H = h.astype(np.float)*2
S = s.astype(np.float)/255
V = v.astype(np.float)/255
  • 15
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值