← 返回首页
颜色识别
发表时间:2025-02-14 09:31:27
颜色识别

在OpenCV中,颜色识别是一个常见任务,通常用于图像处理和计算机视觉项目中。

1.HSV颜色空间

在日常生活中颜色空间大都是采用RGB的形式,RGB 适合于显示系统,却并不适合于图像处理,在opencv中采用BGR,HSV颜色空间,将RGB转化为HSV颜色空间则是我们进行颜色识别的基础。

HSV(Hue, Saturation, Value)是根据颜色的直观特性由A. R. Smith在1978年创建的一种颜色空间, 也称六角锥体模型(Hexcone Model)(参考百度)。在HSV模型中,颜色是由色相(Hue),饱和度(Saturation),明度(Value)共同组成。

HSV与HSB没有区别,它们是同一个概念的不同称呼‌。HSV(Hue, Saturation, Value)和HSB(Hue, Saturation, Brightness)都是基于色相、饱和度和亮度(或明度)的颜色模型,只是名称不同而已‌。

下面是HSV通道对应颜色数值范围参考表:

2.颜色识别

在OpenCV中,如果你想识别图片中的指定颜色,并将其他颜色屏蔽掉,你可以使用以下步骤来实现:

代码实现:

import cv2
import numpy as np

# 步骤1: 读取图片
image = cv2.imread('./images/jpg/color_block.jpg')

# 步骤2: 转换到HSV颜色空间
hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

# 步骤3: 定义蓝色的HSV范围
# 例如,蓝色的HSV范围可以是 (100, 43, 46) 到 (124, 255, 255)
# 例如,红色的HSV范围可以是 (0, 43, 46) 到 (10, 255, 255)
# 例如,绿色的HSV范围可以是 (35, 43, 46) 到 (77, 255, 255)

"""
lower_blue = np.array([100, 43, 46])
upper_blue = np.array([124, 255, 255])
"""

"""
lower_red = np.array([0, 43, 46])
upper_red = np.array([10, 255, 255])
"""

lower_green = np.array([35, 43, 46])
upper_green = np.array([77, 255, 255])

# 步骤4: 创建掩膜
#mask = cv2.inRange(hsv_image, lower_blue, upper_blue)
#mask = cv2.inRange(hsv_image, lower_red, upper_red)
mask = cv2.inRange(hsv_image, lower_green, upper_green)

# 步骤5: 应用掩膜
result = cv2.bitwise_and(image, image, mask=mask)

# 步骤6: 显示结果
cv2.imshow('Original Image', image)
cv2.imshow('Masked Image', result)
cv2.waitKey(0)
cv2.destroyAllWindows()