【OpenCV】HSV颜色识别-HSV基本颜色分量范围

【OpenCV】HSV颜色识别-HSV基本颜色分量范围

 

出处:百度文库

 

一般对颜色空间的图像进行有效处理都是在HSV空间进行的,然后对于基本色中对应的HSV分量需要给定一个严格的范围,下面是通过实验计算的模糊范围(准确的范围在网上都没有给出)。

H:  0 — 180

S:  0 — 255

V:  0 — 255

此处把部分红色归为紫色范围:

 

 

 

 

目前在计算机视觉领域存在着较多类型的颜色空间(color space)。HSL和HSV是两种最常见的圆柱坐标表示的颜色模型,它重新影射了RGB模型,从而能够视觉上比RGB模型更具有视觉直观性。

HSV颜色空间 
HSV(hue,saturation,value)颜色空间的模型对应于圆柱坐标系中的一个圆锥形子集,圆锥的顶面对应于V=1. 它包含RGB模型中的R=1,G=1,B=1 三个面,所代表的颜色较亮。色彩H由绕V轴的旋转角给定。红色对应于 角度0° ,绿色对应于角度120°,蓝色对应于角度240°。在HSV颜色模型中,每一种颜色和它的补色相差180° 。 饱和度S取值从0到1,所以圆锥顶面的半径为1。HSV颜色模型所代表的颜色域是CIE色度图的一个子集,这个 模型中饱和度为百分之百的颜色,其纯度一般小于百分之百。在圆锥的顶点(即原点)处,V=0,H和S无定义, 代表黑色。圆锥的顶面中心处S=0,V=1,H无定义,代表白色。从该点到原点代表亮度渐暗的灰色,即具有不同 灰度的灰色。对于这些点,S=0,H的值无定义。可以说,HSV模型中的V轴对应于RGB颜色空间中的主对角线。 在圆锥顶面的圆周上的颜色,V=1,S=1,这种颜色是纯色。HSV模型对应于画家配色的方法。画家用改变色浓和 色深的方法从某种纯色获得不同色调的颜色,在一种纯色中加入白色以改变色浓,加入黑色以改变色深,同时 加入不同比例的白色,黑色即可获得各种不同的色调。 

 

HSI颜色空间 
HSI色彩空间是从人的视觉系统出发,用色调(Hue)、色饱和度(Saturation或Chroma)和亮度 (Intensity或Brightness)来描述色彩。HSI色彩空间可以用一个圆锥空间模型来描述。用这种 描述HIS色彩空间的圆锥模型相当复杂,但确能把色调、亮度和色饱和度的变化情形表现得很清楚。 通常把色调和饱和度通称为色度,用来表示颜色的类别与深浅程度。由于人的视觉对亮度的敏感 程度远强于对颜色浓淡的敏感程度,为了便于色彩处理和识别,人的视觉系统经常采用HSI色彩空间, 它比RGB色彩空间更符合人的视觉特性。在图像处理和计算机视觉中大量算法都可在HSI色彩空间中 方便地使用,它们可以分开处理而且是相互独立的。因此,在HSI色彩空间可以大大简化图像分析 和处理的工作量。HSI色彩空间和RGB色彩空间只是同一物理量的不同表示法,因而它们之间存在着 转换关系。

HSI 色彩模型是从人的视觉系统出发,用 H 代表色相 (Hue)、S 代表饱和度 (Saturation) 和 I 代表亮度 (Intensity) 来描述色彩。饱和度与颜色的白光光量刚好成反比,它可以说是一个颜色鲜明与否的指标。因此如果我们在显示器上使用 HIS 模型来处理图像,将能得到较为逼真的效果。 
色相 (Hue):指物体传导或反射的波长。更常见的是以颜色如红色,橘色或绿色来辨识,取 0 到 360 度的数值来衡量。 
饱和度 (Saturation):又称色度,是指色彩的强度或纯度。饱和度代表灰色与色调的比例,并以 0% (灰色) 到 100% (完全饱和) 来衡量。 
亮度 (Intensity):是指颜色的相对明暗度,通常以 0% (黑色) 到 100% (白色) 的百分比来衡量。

 

HSL代表色调(Hue),饱和度(Saturation)和亮度(Lightness),通常也称为HLS。HSV代表色调,饱和度和值(Value)。注意HSL 和HSV的两个H的含义是相同的,而饱和度的定义是不同的,虽然都叫饱和度,从后面的定义可以看出二者的不同。
HSL 和 HSV 二者都把颜色描述在圆柱体内的点,这个圆柱的中心轴取值为自底部的黑色到顶部的白色而在它们中间是的灰色,绕这个轴的角度对应于“色相”,到这个轴的距离对应于“饱和度”,而沿着这个轴的距离对应于“亮度”,“色调”或“明度”。 HSV 以人类更熟悉的方式封装了关于颜色的信息:“这是什么颜色?深浅如何?明暗如何?”。HSL 颜色空间类似于 HSV,在某些方面甚至比它还好。HSL的模型为双圆锥形状。
这两种表示在用目的上类似,但在方法上有区别。二者在数学上都是圆柱,但 HSV(色相,饱和度,明度)在概念上可以被认为是颜色的倒圆锥体(黑点在下顶点,白色在上底面圆心),HSL 在概念上表示了一个双圆锥体和圆球体(白色在上顶点,黑色在下顶点,最大横切面的圆心是半程灰色)。HSV 模型在 1978 年由埃尔维?雷?史密斯创立。下图给出了HSL和HSV的圆柱模型。

在圆锥上,角度代表色调H,饱和度S表示为点到中心竖线的距离,而亮度或者值V用中心竖线表示。红色的角度为0度,依次为黄色、绿色、青色、蓝色、橙色。连续两种颜色的角度相差60度。

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: OpenCV是一个开源计算机视觉库,它支持诸如颜色空间转换之类的图像处理操作。HSV颜色空间是将RGB颜色空间中的颜色转换为色相(H),饱和度(S)和明度(V)三个值。使用OpenCV中的cv2.cvtColor()函数可以将图像从RGB转换为HSV。然后可以使用inRange()函数来识别指定范围内的颜色。 ### 回答2: Python是一种非常流行的编程语言,而OpenCV是一种广泛用于计算机视觉的开源库。在使用OpenCV进行颜色识别的时候,最好使用HSV颜色空间而不是RGB颜色空间。这是因为在HSV颜色空间中,我们可以将颜色表示为更直观的方式,即色调,饱和度和值。下面我将详细介绍如何在Python中使用OpenCV进行HSV颜色识别。 1. 导入OpenCV和numpy库 在Python中使用OpenCV进行图像处理,首先需要导入OpenCV和numpy库。Numpy是一个Python科学计算库,用于处理数组和矩阵,是OpenCV中很重要的一个组成部分。 import cv2 import numpy as np 2. 载入图片 在进行颜色识别之前,首先需要载入一张图片,可以使用OpenCV的cv2.imread()函数进行载入,并使用cv2.imshow()函数显示图片。 img = cv2.imread('image.png') cv2.imshow('image', img) 3. 将图像转换为HSV颜色空间 在HSV颜色空间中,可以使用cv2.cvtColor()函数将图像从RGB转换为HSV颜色空间。 hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) 4. 定义颜色范围 HSV颜色空间中,我们可以使用色调(Hue)、饱和度(Saturation)和值(Value)三个参数来描述颜色。对于不同颜色的识别,我们需要定义不同的颜色范围。例如,我们想要找到红色的范围,我们可以定义: lower_red = np.array([0, 50, 50]) upper_red = np.array([10, 255, 255]) 在这个例子中,lower_red和upper_red是颜色范围的下限和上限。 5. 对图像进行颜色分割 一旦我们有了颜色范围,就可以使用cv2.inRange()函数将图像中的颜色分割出来,并将它们变为白色,其余的颜色变为黑色。 mask = cv2.inRange(hsv, lower_red, upper_red) cv2.imshow('mask',mask) 6. 显示结果 最后,我们可以使用cv2.bitwise_and()函数将颜色分割后的图像与原始图像进行合并,并使用cv2.imshow()函数显示结果。 result = cv2.bitwise_and(img,img, mask= mask) cv2.imshow('result',result) 至此,一个简单的HSV颜色识别程序就完成了。在实际应用中,可以根据需要复制上面的步骤并调整颜色范围来识别多个颜色。总之,OpenCV提供了丰富的图像处理功能,为Python中进行计算机视觉任务提供了强大的工具和支持。 ### 回答3: Python是一种高级编程语言,它的优点是简单易学、易于阅读,同时也有着广阔的应用场景。而OpenCV则是计算机视觉和机器人领域中应用最广泛的库。 在图像处理中,我们不仅需要处理RGB 三原色,还需要对图像进行更复杂的处理。HSV颜色模型是一种常用的颜色模型,与常见的RGB模型相比,它的颜色表示更直观,而且更符合人类的视觉感受。 HSV颜色模型主要由三个参数组成:色相、饱和度和亮度,分别代表着颜色的色调、纯度和亮度。H(色相)通道表示颜色是什么样的颜色(如红、绿、蓝等);S(饱和度)通道表示颜色的纯度或亮度(即颜色的“深度”);V(亮度)通道表示颜色的明亮程度。 在使用Python和OpenCV进行图像处理时,我们可以通过HSV颜色模型来完成颜色的识别。一般来说,先将图像从RGB空间转换到HSV空间,然后通过设置合适的颜色阈值来获取感兴趣的颜色区域。 使用Python+OpenCV实现HSV颜色识别的具体步骤如下: 1. 读取图像并将其转换为HSV颜色空间 ```python import cv2 # 读取图像 img = cv2.imread('img.jpg') # 将图像转换为HSV颜色空间 hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) ``` 2. 设置颜色阈值,获取感兴趣的区域 ```python # 设置颜色阈值,获取感兴趣的区域 lower_color = np.array([h_min, s_min, v_min]) upper_color = np.array([h_max, s_max, v_max]) mask = cv2.inRange(hsv, lower_color, upper_color) ``` 其中,lower_color 和 upper_color 分别代表颜色范围的下限和上限,可以根据实际需求进行调整。mask 是根据颜色阈值设定的掩码图像,它将感兴趣的区域标记出来,以便后续的处理。 3. 对感兴趣的区域进行形态学操作 ```python kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3)) mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel, iterations=2) ``` 这一步操作主要是对掩码图像进行形态学操作,以去除一些噪声和不规则的轮廓。这里采用了开运算,先对图像进行腐蚀操作,再进行膨胀操作,以消除噪声。iterations参数代表迭代次数,多次迭代可以更好地去除噪声。 4. 寻找感兴趣区域并进行标记 ```python contours, hierarchy = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) for i, contour in enumerate(contours): area = cv2.contourArea(contour) if area < min_area: continue (x, y, w, h) = cv2.boundingRect(contour) cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2) ``` 这一步操作主要是对感兴趣区域进行标记。使用findContours函数找到感兴趣的轮廓,使用boundingRect函数计算轮廓的边界框,将其用矩形表示,并在原始图像上绘制出来。 通过上述的步骤,就可以用Python和OpenCV来实现HSV颜色识别了。当然,具体的实现还需要结合实际的需求和场景进行调整和优化,但整个流程大概是这样的。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值