当前位置: 首页 > news >正文

OpenCV(二十一):HSV与HSL

在图像处理与计算机视觉中,颜色空间(Color Space)的选择对算法效果有着至关重要的影响。RGB 颜色空间虽然直观、常见,但由于其三个通道(红、绿、蓝)与人类对颜色的主观感知差异较大,因此在色彩分割、目标识别、颜色增强等任务中并非最优。为了解决 RGB 与人类视觉特性的不匹配问题,科学家提出了多种感知友好的颜色空间,其中 HSV(Hue-Saturation-Value)HSL(Hue-Saturation-Lightness) 是最常用的两种。

RGB 颜色空间

RGB 模型以三种基色(Red、Green、Blue)的强度来表示颜色,每种颜色分量取值范围一般为 [0, 255] 或归一化为 [0, 1]。例如:

  • (255, 0, 0):纯红;
  • (0, 255, 0):纯绿;
  • (0, 0, 255):纯蓝;
  • (255, 255, 255):白色;
  • (0, 0, 0):黑色。

RGB 模型的缺点在于:

  1. 明暗变化会同时影响三个通道;
  2. 人眼对色调(Hue)与亮度(Lightness/Value)的感知并非线性;
  3. 颜色分割或跟踪时受光照变化干扰大。

因此需要将颜色分解为更接近人类视觉的形式,即:色调(Hue)饱和度(Saturation)亮度(Lightness/Value)

HSV 模型原理

HSV 模型以三维圆锥体表示颜色空间:

  • Hue(色调):颜色类型,如红、绿、蓝;在圆周上按角度表示(0°~360°),OpenCV 中缩放到 [0,180]。
  • Saturation(饱和度):颜色纯度,表示颜色中灰度成分的多少,范围 [0,1];
  • Value(明度):颜色的亮度强度,对应颜色的“明亮”程度,范围 [0,1]。

在 HSV 模型中:

  • 当 S=0 时,颜色为灰阶;
  • 当 V=0 时,颜色为黑;
  • Hue 决定了“是什么颜色”,而 S、V 决定了“颜色有多浓、多亮”。

HSV 与 RGB 的转换公式

设 R, G, B ∈ [0,1],则:

在这里插入图片描述

Hue 计算:

在这里插入图片描述

Saturation:

在这里插入图片描述

Value:

在这里插入图片描述

HSL(或 HLS)模型原理

HSL 模型(Hue, Saturation, Lightness)与 HSV 类似,同样将颜色表示为“色调+饱和度+亮度”的形式,但亮度(L)定义不同,导致视觉表现差异更符合人眼习惯。

HSL 的颜色空间可视为双锥体(上下对称),底部为黑,顶部为白,中间横截面表示饱和颜色。

  • Hue(色调):与 HSV 相同;
  • Saturation(饱和度):反映颜色纯度;
  • Lightness(亮度):反映颜色的明暗程度,0 为黑,1 为白,0.5 为标准亮度。

HSL 与 RGB 的转换公式

同样定义:

在这里插入图片描述

Lightness:

在这里插入图片描述

Saturation:

在这里插入图片描述

Hue: 与 HSV 的 Hue 计算相同。

可见,HSL 的亮度是平均值,而 HSV 的亮度是最大通道值。这一差异使得:

  • HSV 更适合描述“光照强度”;
  • HSL 更接近人眼对“明暗”的感知。

HSV 与 HSL 的区别对比

项目HSVHSL
英文全称Hue-Saturation-ValueHue-Saturation-Lightness
空间形状圆锥体双锥体
亮度定义取 RGB 最大分量RGB 平均值
饱和度表现随亮度变化在中间亮度时最饱和
黑白区间V=0 黑,V=1 白L=0 黑,L=1 白
人眼匹配度一般更接近人眼感知
常见用途目标跟踪、颜色分割图像增强、色彩校正
OpenCV 支持cv::COLOR_BGR2HSVcv::COLOR_BGR2HLS

应用对比分析

颜色分割

  • HSV 模型中,通过固定 Hue 范围即可分离目标色;
  • HSL 模型中,受亮度影响较小,适合在光照变化大的环境中分割。

目标跟踪

在基于颜色直方图的目标跟踪(如 CamShift、MeanShift)中,HSV 通常优于 RGB。因为在 HSV 空间下,V 通道的变化不影响色调分布。

图像增强与滤波

在图像增强中,通过调节 HSL 的 Lightness 通道可以精确控制亮度变化,而不改变色调。

肤色检测

HSL 模型对光照敏感度低于 HSV,因此在肤色检测中使用 HSL(或 YCrCb)空间更鲁棒。

cv::COLOR_BGR2HSVcv::COLOR_BGR2HLS

BGR → HSV 转换

import cv2
import numpy as np# 读取图像
img_bgr = cv2.imread('test.jpeg')
if img_bgr is None:raise FileNotFoundError("未找到 test.jpeg,请确保路径正确")# 转换为 HSV
img_hsv = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2HSV)# 拆分通道
h, s, v = cv2.split(img_hsv)# 显示结果
cv2.imshow('Original (BGR)', img_bgr)
cv2.imshow('Hue Channel', h)
cv2.imshow('Saturation Channel', s)
cv2.imshow('Value Channel', v)# 保存结果
cv2.imwrite('output_hsv.jpg', img_hsv)
cv2.imwrite('hue.jpg', h)
cv2.imwrite('saturation.jpg', s)
cv2.imwrite('value.jpg', v)cv2.waitKey(0)
cv2.destroyAllWindows()

BGR → HLS 转换

import cv2
import numpy as np# 读取图像
img_bgr = cv2.imread('test.jpg')
if img_bgr is None:raise FileNotFoundError("未找到 test.jpg,请确保路径正确")# 转换为 HLS
img_hls = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2HLS)# 拆分通道
h, l, s = cv2.split(img_hls)# 显示结果
cv2.imshow('Original (BGR)', img_bgr)
cv2.imshow('Hue Channel', h)
cv2.imshow('Lightness Channel', l)
cv2.imshow('Saturation Channel', s)# 保存结果
cv2.imwrite('output_hls.jpg', img_hls)
cv2.imwrite('hls_hue.jpg', h)
cv2.imwrite('lightness.jpg', l)
cv2.imwrite('hls_saturation.jpg', s)cv2.waitKey(0)
cv2.destroyAllWindows()

总结

HSV 与 HSL 都是基于人眼感知设计的颜色空间,其核心思想是将颜色分离为“色调 + 饱和度 + 亮度/明度”三个维度。
两者的主要区别在于亮度定义方式:

  • HSV 的 Value 反映光照强度,适合分割与跟踪;
  • HSL 的 Lightness 反映视觉明暗感,适合颜色校正与图像增强。

在 OpenCV 中:

  • cv::COLOR_BGR2HSVcv::COLOR_BGR2HLS 分别实现两种转换;
  • Hue 范围缩放为 [0,180];
  • 选择何种空间取决于应用目标:
    → 若注重颜色识别与跟踪,用 HSV;
    → 若注重亮度调节与视觉一致性,用 HSL。
http://www.dtcms.com/a/577501.html

相关文章:

  • 东莞seo建站优化方法做网站最小的字体是多少钱
  • Linux安装镜像initrd深度解析:从Lorax构建到故障排查
  • 基础篇:IoC(六):资源和资源加载器
  • Qt之元对象系统
  • 宿州网站建设设计公司海口可信的海南网站建设
  • Go Map 实现原理解析:从数据结构到核心机制
  • 百度做的网站国外可以打开吗软件开发过程五个步骤
  • 快速入门 - 开始使用 Azure Digital Twins Explorer 中的示例场景
  • 快速入门 - Azure 数字孪生的 3D 场景工作室(预览版)入门
  • 【OS zephyr】子系统logging
  • 哪里有免费建设网站企业解决方案ppt
  • Android内核进阶之获取PCM状态snd_pcm_status:用法实例(八十三)
  • 建设银行网站用户登录网页类界面图片
  • 【产品调研】MATB-II 软件用户指南总结
  • 程序开发的步骤东莞关键词排名seo
  • 重装系统后,恢复mysql的方法
  • 年化波动率匹配原则在ETF网格区间选择中的应用
  • 智慧公厕系统单机版与联网版有哪些区别
  • 华为技术有限公司 C语言编程规范
  • 新买的硬盘格式化后容量为啥缩水啦?
  • 【Ros2学习】服务-客户端模式
  • 网站建设的新闻重庆建网
  • 数字货币时代网络域名的价值评估
  • 帆软报表本地设计器中连接远程服务器后SAP数据集不显示问题
  • 第174期 TIMM:让迁移学习变得异常简单的PyTorch“隐藏”库
  • git cherry-pick
  • AR 眼镜之-普通电话-实现方案
  • 下厨房网站学做蒸包视频可以上传自己做的视频的网站吗
  • IO卡常见问题处理
  • 11_FastMCP 2.x 中文文档之FastMCP高级功能:用户引导详解