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替换为你自己的图像路径。同时,颜色范围的设定可能需要根据具体的图像和提取目标进行调整。

相关推荐
人工智能培训网34 分钟前
《计算机视觉:瓶颈之辩与未来之路》
人工智能·学习·计算机视觉·人工智能培训·人工智能工程师
volcanical1 小时前
LoRA:低秩分解微调与代码
人工智能
keira6741 小时前
【21天学习AI底层概念】day3 机器学习的三大类型(监督学习、无监督学习、强化学习)分别适用于哪种类型的问题?
人工智能·学习·机器学习
海森大数据2 小时前
人工智能时代的计算化学实验:量子化学与机器学习的融合
大数据·人工智能·神经网络·机器学习
魏+Mtiao15_2 小时前
矩阵源代码部署与功能简介
人工智能·python·线性代数·矩阵·php·音视频
凝眸伏笔2 小时前
【TensorFlow】基本概念:张量、常量、变量、占位符、计算图
人工智能·tensorflow·neo4j
魏+Mtiao15_2 小时前
短视频矩阵系统功能介绍与独立部署流程
java·大数据·人工智能·矩阵
VIT199801062 小时前
AI实现葡萄叶片识别(基于深度学习的葡萄叶片识别)
人工智能·python·深度学习
一只小灿灿2 小时前
深度学习:从入门到精通的全面学习路径
人工智能·深度学习·学习
旺仔溜溜没2 小时前
深度学习之pycharm配置opencv(超简单)
人工智能·深度学习·yolo·计算机视觉