HSV颜色空间

HSV颜色空间介绍

一、HSV颜色空间的概念

HSV(Hue - Saturation - Value)是一种颜色模型,它将颜色描述为三个分量:

  • 色调(Hue):用于区分不同的颜色类别,取值范围通常为0 - 360°(在OpenCV中为0 - 179)。例如,红色大约在0°或180°,绿色在120°左右,蓝色在240°左右。它就像是颜色的"身份标识",决定了我们看到的是红色、绿色还是其他颜色。
  • 饱和度(Saturation):表示颜色的纯度,取值范围是0 - 100%(在OpenCV等计算机视觉库中为0 - 255)。饱和度越高,颜色越鲜艳;当饱和度为0时,颜色变为灰度,即没有颜色成分,只有亮度信息。
  • 明度(Value):描述颜色的明亮程度,取值范围也是0 - 100%(在计算机视觉库中为0 - 255)。明度为0时表示黑色,明度越高,颜色越亮。

二、RGB转HSV公式

设RGB颜色空间中的颜色值为 ( R , G , B ) (R, G, B) (R,G,B),其中 R , G , B R, G, B R,G,B的取值范围是0 - 255。转换后的HSV值为 ( H , S , V ) (H, S, V) (H,S,V),其转换公式如下:

  1. 计算 V V V(明度)

    • V = m a x ( R , G , B ) V = max(R, G, B) V=max(R,G,B)
  2. 计算 S S S(饱和度)

    • 首先计算 d e l t a = m a x ( R , G , B ) − m i n ( R , G , B ) delta = max(R, G, B)-min(R, G, B) delta=max(R,G,B)−min(R,G,B)
    • 如果 V = 0 V = 0 V=0,则 S = 0 S = 0 S=0;否则, S = d e l t a V S=\frac{delta}{V} S=Vdelta
  3. 计算 H H H(色调)

    • 如果 S = 0 S = 0 S=0,则 H H H未定义(通常设为0)。
    • 当 R = m a x ( R , G , B ) R = max(R, G, B) R=max(R,G,B)时, H = 60 × ( G − B d e l t a + ( G < B ? 6 : 0 ) ) H = 60\times(\frac{G - B}{delta}+(G < B? 6 : 0)) H=60×(deltaG−B+(G<B?6:0))
    • 当 G = m a x ( R , G , B ) G = max(R, G, B) G=max(R,G,B)时, H = 60 × ( B − R d e l t a + 2 ) H = 60\times(\frac{B - R}{delta}+2) H=60×(deltaB−R+2)
    • 当 B = m a x ( R , G , B ) B = max(R, G, B) B=max(R,G,B)时, H = 60 × ( R − G d e l t a + 4 ) H = 60\times(\frac{R - G}{delta}+4) H=60×(deltaR−G+4)

OpenCV中cv2.inRange()函数的应用示例

一、cv2.inRange()函数功能

cv2.inRange()函数用于在图像中提取指定范围内的像素。它根据给定的下限和上限阈值创建一个掩码(mask),掩码中像素值在指定范围内的位置为255(白色,表示满足条件),其他位置为0(黑色,表示不满足条件)。

二、示例代码

python 复制代码
import cv2
import numpy as np

# 读取图像
image = cv2.imread('your_image.jpg')
# 将图像从BGR转换为HSV
hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

# 定义要提取颜色的HSV范围(以提取蓝色为例)
lower_blue = np.array([100, 50, 50])
upper_blue = np.array([140, 255, 255])

# 创建掩码
mask = cv2.inRange(hsv_image, lower_blue, upper_blue)

# 对原图像和掩码进行位运算,提取蓝色物体
result = cv2.bitwise_and(image, image, mask = mask)

# 显示结果
cv2.imshow('Original Image', image)
cv2.imshow('Mask', mask)
cv2.imshow('Result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()

在上述示例中:

  1. 首先通过cv2.imread()函数读取一张图像,然后使用cv2.cvtColor()函数将其从BGR颜色空间转换为HSV颜色空间。这是因为cv2.inRange()函数在HSV空间中进行颜色范围提取更加方便直观。
  2. 接着定义了要提取的蓝色在HSV空间中的范围。lower_blueupper_blue分别是下限和上限阈值数组,这里的数值是根据蓝色在HSV空间中的大致范围确定的。
  3. 使用cv2.inRange()函数创建了一个掩码。这个掩码中只有蓝色物体对应的像素位置为255,其他位置为0。
  4. 最后,通过cv2.bitwise_and()函数将原图像和掩码进行位运算,得到只包含蓝色物体的图像。并通过cv2.imshow()函数显示了原始图像、掩码和最终结果,cv2.waitKey(0)等待用户按键,cv2.destroyAllWindows()关闭所有打开的窗口。

请注意,在实际应用中,你需要将your_image.jpg替换为你自己的图像路径。同时,颜色范围的设定可能需要根据具体的图像和提取目标进行调整。

相关推荐
算家计算6 分钟前
视觉-文本压缩框架——Glyph本地部署教程,以视觉压缩重塑长上下文处理范式
人工智能
qzhqbb8 分钟前
神经网络—— 人工神经网络
人工智能·深度学习·神经网络
磊磊落落11 分钟前
Cursor 初体验:将 React 项目从 JavaScript 升级到 TypeScript
人工智能
算家计算13 分钟前
小鹏机器人真假难分引全网热议!而这只是开始......
人工智能·机器人·资讯
百锦再24 分钟前
第1章 Rust语言概述
java·开发语言·人工智能·python·rust·go·1024程序员节
说私域38 分钟前
开源AI智能名片链动2+1模式S2B2C商城系统下消费点评的信任构建机制研究
人工智能·开源
Victory_orsh44 分钟前
“自然搞懂”深度学习(基于Pytorch架构)——010203
人工智能·pytorch·python·深度学习·神经网络·算法·机器学习
长桥夜波1 小时前
机器学习日报10
人工智能·机器学习
CoovallyAIHub1 小时前
突破360°跟踪极限!OmniTrack++:全景MOT新范式,HOTA指标狂飙43%
深度学习·算法·计算机视觉
ytttr8731 小时前
MATLAB实现经验模态分解(EMD)与希尔伯特变换获取能量谱
人工智能·python·matlab