HSV色彩空间

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HSV色彩空间相关的知识,希望对你有一定的参考价值。

参考技术A import cv2

import numpy as np

imgs = cv2.imread('water.jpg')

HSV_img = cv2.cvtColor(imgs,cv2.COLOR_BGR2HSV)

HSV2_img = cv2.cvtColor(HSV_img,cv2.COLOR_HSV2BGR)

cv2.imshow('BGR_student',imgs)

cv2.imshow('HSV_img',HSV_img)

cv2.imshow('HSV2_img',HSV2_img)

wait_re = cv2.waitKey(0) # 程序等待,否则会一闪而过

cv2.destroyAllWindows()

运行结果:

在HSV色彩空间中,H通道对应不同的颜色,因此可以通过对H通道的筛选便能筛选出特定的颜色。

dst = cv2.inRange(src,lowerb,upperb)

src---表示要检查的数组或图像

lower---表示范围的下界

upper---表示范围的上界

dst---表示输出结果,大小和src一致。在设定范围(【lower,upper】)的,对应位置上的值为255,其余位置为0.

提取颜色时,往往不是提取一个特定的值,而是提取一个颜色区间。例如,在OpenCV中的HSV色彩空间中,蓝色在H通道的值是120。在提取蓝色时,通常提取它附近的一个区间值,即[120-10,120+10]范围内的值来指定蓝色。相比之下,HSV模式中的S通道、V通道的值一般在区间【100,255】,因为当饱和度和亮度太低时,计算出来的色调可能就不可靠了。

另外绿色值分布在[50,100,100]和[70,255,255]之间;红色在[0,100,100]和[10,255,255]之间。

import cv2

import numpyas np

img = cv2.imread('water.jpg')

hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)

cv2.imshow('img_BGR',img)

cv2.imshow('img_hsv',hsv)

# 指定红的范围

minRed = np.array([10,100,100],dtype=np.uint8)

maxBRed = np.array([30,200,200],dtype=np.uint8)

mask_red = cv2.inRange(hsv,minRed,maxBRed)

red_part2 = cv2.bitwise_and(hsv,hsv,mask=mask_red)

cv2.imshow('red_part2',red_part2)

cv2.waitKey(0)

cv2.destroyAllWindows()

通过分析估算出肤色在HSV空间内的范围,从而提取包含肤色部份图像。

这里将色调范围定在[5,170]

饱和度定在[25,166]

img = cv2.imread('houzi.jpeg')

hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)

cv2.imshow('img_BGR',img)

cv2.imshow('img_hsv',hsv)

minHue =5

maxHue =170

hueMask = cv2.inRange(h, minHue,maxHue)

minSat =25

maxSat =166

satMask = cv2.inRange(s,minSat,maxSat)

mask = hueMask & satMask

roi_part1 = cv2.bitwise_and(img,img,mask=mask)

roi_part2 = cv2.bitwise_and(hsv,hsv,mask=mask)

cv2.imshow('roi_part1',roi_part1)

cv2.imshow('roi_part2',roi_part2)

cv2.waitKey(0)

在HSV模型内进行分量值的调整能生成一些有趣的效果。例如,将一幅图像的H通道和S通道保持不变,将其V通道的值都调整为255.

在RGB色彩空间加一个A通道,也叫alpha通道,用来表示透明度。这四个通道被称为RGBA色彩空间,png图像是一种典型的四通道图像,alpha通道的取值范围是[0,1],或者[0,255],表示从透明到不透明。

import cv2

import numpyas np

img = cv2.imread('wasser_2.jpg')

bgra = cv2.cvtColor(img,cv2.COLOR_BGR2BGRA)

b,g,r,a = cv2.split(bgra)

a[:,:] =80

bgra1 = cv2.merge([b,g,r,a])

cv2.imshow('img_BGR',img)

cv2.imshow('bgra1',bgra1)

a[:,:] =150

bgra2 = cv2.merge([b,g,r,a])

cv2.imshow('bgra2',bgra2)

a[:,:] =10

bgra3 = cv2.merge([b,g,r,a])

cv2.imshow('bgra3',bgra3)

cv2.waitKey(0)

cv2.destroyAllWindows()

cv2.imwrite('wasser_bgra3.png',bgra3)

cv2.imwrite('wasser_bgra3.jpg',bgra3)

显示出来是没有什么差别的,但保存的png图片是有差别的。

Atitit  rgb yuv  hsv HSL 模式和 HSV(HSB) 图像色彩空间的区别

 

 

Atitit  rgb yuv  hsv HSL 模式和 HSV(HSB) 图像色彩空间的区别

 

1.1. 色彩的三要素 —— 色相、明度、纯度1

1.2. YUV三个字母中,其中"Y"表示明亮度(Lumina nceLuma),也就是灰阶值;而"U""V"表示的则是色度(ChrominanceChroma2

1.3. HSB HSV 是是一样的,只是叫法不同,HSL 则还有一些细微的区别:2

2. RGB 是对机器很友好的色彩模式,但并不够人性化,因为我们对色彩的认识往往是”什么颜色?鲜艳不鲜艳?亮还是暗?”。HSL 模式和 HSV(HSB) 都是基于 RGB 的,是作为一个更方便友好的方法创建出来的。3

2.1. HSL 稍微有一些不同,Hue(色相)和 HSB/HSV 模式中一样用数值表示,但是, S,同样代表“饱和度”,定义不一样,且需要转换。4

2.2. HSL HSB 哪一个更适合人机界面,是有争议的5

1.1. 色彩的三要素 —— 色相、明度、纯度

· 

色相(表,表现):即色彩的相貌和特征。自然界中色彩的种类很多,色相指色彩的种类和名称。如;红、橙、黄、绿、青、蓝、紫等等颜色的种类变化就叫色相。

· 

· 

明度(表,面子):指色彩的亮度或明度,也叫明亮度

· 

纯度(里,里子):指色彩的鲜艳程度,也叫饱和度

在实际应用中,我们需要记住色相环上的六大主色,用作基本参照:360°/0°红、60°黄、120°绿、180°青、240°蓝、300°洋红,它们在色相环上按照60°圆心角的间隔

 

 

1.2. YUV三个字母中,其中"Y"表示明亮度(Lumina nceLuma),也就是灰阶值;而"U""V"表示的则是色度(ChrominanceChroma

YUV

 YUV的原理是把亮度与色度分离,研究证明,人眼对亮度的敏感超过色度。利用这个原理,可以把色度信息减少一点,人眼也无法查觉这一点。

 

  YUV三个字母中,其中"Y"表示明亮度(Lumina nceLuma),也就是灰阶值;而"U""V"表示的则是色度(ChrominanceChroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。用这个三个字母好象就是通道命令。

 

HSL  HSV(也叫做 HSB)是对RGB 色彩空间中点的两种有关系的表示,它们尝试描述比 RGB 更准确的感知颜色联系,并仍保持在计算上简单。HSL 表示 hue色相)、saturation饱和度)、lightness亮度),HSV表示 huesaturationvalue(色调) HSB 表示 huesaturationbrightness明度)。

 

1.3. HSB HSV 是是一样的,只是叫法不同,HSL 则还有一些细微的区别:

 

2. RGB 是对机器很友好的色彩模式,但并不够人性化,因为我们对色彩的认识往往是”什么颜色?鲜艳不鲜艳?亮还是暗?”。HSL 模式和 HSV(HSB) 都是基于 RGB 的,是作为一个更方便友好的方法创建出来的。



HSB 为 色相,饱和度,明度,

HSL 为 色相,饱和度,亮度,

HSV 为色相,饱和度,明度。

Hue(色相)是指取值范围在0-360°的圆心角,每个角度可以代表一种颜色

 

 

 

2.1. HSL 稍微有一些不同,Hue(色相)和 HSB/HSV 模式中一样用数值表示,但是, S,同样代表“饱和度”,定义不一样,且需要转换。

 L 代表亮度,和 Brightness/Value 不一样。Brightness(明度)是被认为是”光的量“,可以是任何颜色。

Lightness(亮度)是作为”白的量“来理解的。Saturation(饱和度)不一样,因为在两个模型中,饱和度都按比例缩放以适应明度或亮度的定义。

两者的区别,和他们之间对于饱和度的定义的不同。咱

2.2. HSL HSB 哪一个更适合人机界面,是有争议的

微软的Office系列使用的是HSL,而Photoshop等使用的是HSB。

注意尽管在 HSL 和 HSV 中“色相”指称相同的性质,它们的“饱和度”的定义是明显不同的

 

RGBLabYUVHSIHSV等颜色空间的区别 - hellocdw的专栏 - 博客频道 - CSDN.NET.html

YCbCrYUV的区别 - michaelcao1980的专栏 - 博客频道 - CSDN.NET.html

 

作者:: 绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 ) 

汉字名:艾提拉(艾龙)   EMAIL:1466519819@qq.com

转载请注明来源: http://www.cnblogs.com/attilax/

Atiend

 

 

以上是关于HSV色彩空间的主要内容,如果未能解决你的问题,请参考以下文章

HSV色彩空间

色彩空间中的HSL、HSV、HSB有啥区别?

色彩空间中的HSL,HSV,HSB有啥区别

RGB、lαβ、HSV色彩空间的区别

HSV色彩空间

RGB转到HSV色彩空间转换