在写程序的过程中,遇到了RGB 转HSV时,print出的hsv的范围很奇怪,经过查找资料,得知:
https://blog.csdn.net/wsbeibei/article/details/24970703
opencv中hsv的范围如下:
H: [0,180]
S:[0,255]
V:[0,255]
在做hsv各通道颜色的计算时,常用的hsv范围如下:
H:[0,360]
S:[0,100]
V:[0,100]
就需要对转换后的hsv各通道数据做如下处理:
h= h*2;
s = (float)s/255*100;
v = (float)v/255*100;
另外:
CV_BGR2HSV 在转换图像的时候是将 H / 2 —> H ,我们知道图像中色相H的取值范围为 0-360 ,所以利用opencv转换之后得到的H的范围为 0-180;而CV_BGR2HSV_FULL 实现的映射是 H * 255 / 360 —>H , 所以利用_FULL 这个转换得到的H通道图像的范围为 0-255。
之前知道,
利用opencv把RGB图片像HSV颜色空间转变的时候,
H通道的值范围为: 0-180
S: 0-255
V:0-255
利用直方图显示三个通道的时候,H通道都集中在前半部分,想让它取值范围扩大~~~~~~~
后来发现了 CV_BGR2HSV_FULL ,
CV_BGR2HSV 在转换图像的时候是将 H / 2 —> H ,我们知道图像中色相H的取值范围为 0-360 ,所以利用opencv转换之后得到的H的范围为 0-180
而 CV_BGR2HSV_FULL 实现的映射是 H * 255 / 360 —>H , 所以利用_FULL 这个转换得到的H通道图像的范围为 0-255
这两种方式都是opencv把[0-360] 的数据压缩到一个字节可以处理的数据。[ 所以这里说的图像的depth = 8, 刚好能表示的最大值是 255]
上面说的图像的 depth = 8, 如果你的图像 位深不是 8位,比如 32 位, 那么你就可以得到 [0, 360] 表示的 H通道图像了。
in fact, HSV颜色模型规定的各通道取值范围为:
H : 0-360 S:0-1 V: 0-1
可以利用 CV_BGR2HSV 得到的 H S V 的 S V /255 转换得到。