HSV颜色空间

news2024/12/13 5:46:38

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×(deltaGB+(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×(deltaBR+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×(deltaRG+4)

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

一、cv2.inRange()函数功能

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

二、示例代码

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2258598.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32 HAL库之SDIO例程 Micro SD卡 - 2

1、硬件图 2、示例代码 根据提示配置SDCLK为72/3 24MHz。 static void MX_SDIO_SD_Init(void) {/* USER CODE BEGIN SDIO_Init 0 */SD_InitTypeDef Init;Init.ClockEdge SDIO_CLOCK_EDGE_RISING;Init.ClockBypass SDIO_CLOCK_BYPASS_DISABLE;Init.ClockPo…

小程序开发中的插件生态与应用-上

更多精彩内容都在公zhong号&#xff1a;小白的大数据之旅 在小程序的开发过程中&#xff0c;插件作为扩展功能、提升效率的重要工具&#xff0c;扮演着不可或缺的角色。它们不仅能够帮助开发者快速集成复杂的功能模块&#xff0c;还能优化开发流程&#xff0c;缩短项目周期。 …

深入了解Text2SQL开源项目(Chat2DB、SQL Chat 、Wren AI 、Vanna)

深入了解Text2SQL开源项目&#xff08;Chat2DB、SQL Chat 、Wren AI 、Vanna&#xff09; 前言1.Chat2DB2.SQL Chat3.Wren AI4.Vanna 前言 在数据驱动决策的时代&#xff0c;将自然语言查询转化为结构化查询语言&#xff08;SQL&#xff09;的能力变得日益重要。无论是小型创业…

Java面试之单例模式浅谈

单例模式是Java面试中常会问到的一个问题&#xff0c;众所周知&#xff0c;单例模式分为两大部分&#xff1a;饿汉模式和懒汉模式。但是&#xff0c;如果当面试官问道关于单例模式的话&#xff0c;如果你只答出这两种模式&#xff0c;且懒汉模式还是最基础最简陋版的话&#xf…

零距离对接Modnbus转Profinet网关连接伺服与PLC

本研究案例详细阐述了开疆智能Modbus转Profinet网关KJ-PNG-201在实现HD3-L系列通用伺服驱动器与PLC互联中的应用。所涉及的设备包括西门子S7-1200 PLC、Modbus转Profinet网关以及HD3-L系列通用伺服驱动器。通过网关转换MODBUS协议的伺服驱动器与PROFINET协议的PLC之间的通信&am…

集成方案 | Docusign + 泛微,实现全流程电子化签署!

本文将详细介绍 Docusign 与泛微的集成步骤及其效果&#xff0c;并通过实际应用场景来展示 Docusign 的强大集成能力&#xff0c;以证明 Docusign 集成功能的高效性和实用性。 在现代企业运营中&#xff0c;效率和合规性是至关重要的。泛微作为企业级办公自动化和流程管理的解决…

CTF-WEB: php-Session 文件利用 [第一届国城杯 n0ob_un4er 赛后学习笔记]

step 1 搭建容器 教程 A5rZ 题目 github.com Dockerfile 有点问题,手动修复一下 FROM php:7.2-apacheCOPY ./flag /root COPY ./readflag / COPY ./html/ /var/www/html/ COPY ./php.ini /usr/local/etc/php/php.ini COPY ./readflag /readsecretRUN chmod 755 /var/www…

融资融券哪家证券公司利率3.8%,融资融券交易流程科普

融资融券哪个券商合适主要考虑券商业务实力与佣金费率等相关因素。 业务方面&#xff0c;一些大型上市券商业务更加成熟。这些券商在融资融券市场中占据重要地位&#xff0c;资金充足&#xff0c;券源丰富&#xff0c;能够满足投资者多样化的投资需求。 融资融券的利率和佣金…

Java 使用 Redis 实现微博热搜功能

在社交平台上&#xff0c;热搜功能是一个非常重要的组成部分。它展示了当前最热门的话题&#xff0c;帮助用户迅速了解最受关注的事件。在微博等平台上&#xff0c;热搜榜单通常是实时变化的&#xff0c;可能会根据用户的互动数据&#xff08;如搜索频次、点赞量、评论数等&…

《庐山派从入门到...》IDE启动

《庐山派从入门到...》IDE启动 《庐山派从入门到...》IDE启动 IDE&#xff08;Integrated Development Environment&#xff09;&#xff0c;即集成开发环境&#xff0c;是一种软件应用程序&#xff0c;旨在为软件开发人员提供一个全面的工具集合&#xff0c;以便可以更高效地编…

打电话玩手机识别-支持YOLO,COCO,VOC格式的标记,超高识别率可检测到手持打电话, 非接触式打电话,玩手机自拍等

打电话玩手机识别-支持YOLO&#xff0c;COCO&#xff0c;VOC格式的标记&#xff0c;超高识别率可检测到手持打电话&#xff0c; 非接触式打电话&#xff0c;玩手机自拍等1275个图片。 手持打电话&#xff1a; 非接触打电话 玩手机 数据集下载 yolov11:https://download.csdn…

【智体OS】官方上新发布智体电视:基于rtpc和rttouchpad实现智体电视的手机遥控-可安装任意PC应用用于智体电视

【智体OS】官方上新发布智体电视&#xff1a;基于rtpc和rttouchpad实现智体电视的手机遥控-可安装任意PC应用用于智体电视 dtns.network是一款主要由JavaScript编写的智体世界引擎&#xff08;内嵌了three.js编辑器的定制版-支持以第一视角浏览3D场馆&#xff09;&#xff0c;…

Flink+Paimon实时数据湖仓实践分享

随着 Paimon 近两年的推广普及&#xff0c;使用 FlinkPaimon 构建数据湖仓的实践也越来越多。在 Flink 实时数据开发中&#xff0c;对于依赖大量状态 state 的场景&#xff0c;如长周期的累加指标计算、回撤长历史数据并更新等&#xff0c;使用实时数仓作为中间存储来代替 Flin…

Stable Diffusion本地部署:从零开始的完整指南

1、引言 Stable Diffusion是计算机视觉领域的一个生成式大模型&#xff0c;能够进行文生图&#xff08;txt2img&#xff09;和图生图&#xff08;img2img&#xff09;等图像生成任务。它利用深度学习技术&#xff0c;特别是RealisticVision v2.0模型&#xff0c;能够创造出接近…

鸿蒙元服务上架

鸿蒙元服务上架 一、将代码打包成 .app 文件1. 基本需求2. 生成密钥和证书请求文件3. 申请发布证书4. 申请发布Profile5. 配置签名信息6. 更新公钥指纹7. 打包项目成 .app 文件 二、发布元服务1. 进入应用信息页面2. 上传软件包3. 配置隐私协议4. 配置版本信息5. 提交审核&…

【论文阅读】PRIS: Practical robust invertible network for image steganography

内容简介 论文标题&#xff1a;PRIS: Practical robust invertible network for image steganography 作者&#xff1a;Hang Yang, Yitian Xu∗, Xuhua Liu∗, Xiaodong Ma∗ 发表时间&#xff1a;2024年4月11日 Engineering Applications of Artificial Intelligence 关键…

day2 数据结构 结构体的应用

思维导图 小练习&#xff1a; 定义一个数组&#xff0c;用来存放从终端输入的5个学生的信息【学生的信息包含学生的姓名、年纪、性别、成绩】 1>封装函数 录入5个学生信息 2>封装函数 显示学生信息 3>封装函数 删除第几个学生信息&#xff0c;删除后调用显示学…

特征交叉-CAN学习笔记代码解读

一 核心模块coaction 对于每个特征对(feature_pairs)weight, bias 来自于P_inductionP_fead是MLP的input 举个例子&#xff1a;如果是用户ID和产品ID的co-action&#xff0c;且产品ID是做induction&#xff0c;用户ID是做feed。 step1 用户ID/产品ID都先形成一个向量&#xf…

EfficientNet与复合缩放理论(Compound Scaling Theory) 详解(MATLAB)

1.EfficientNet网络与模型复合缩放 1.1 EfficientNet网络简介 1.1.1 提出背景、动机与过程 EfficientNet是一种高效的卷积神经网络&#xff08;CNN&#xff09;&#xff0c;由Google的研究团队Tan等人在2019年提出。EfficientNet的设计目标是提高网络的性能&#xff0c;同时减…

SQL语句在MySQL中如何执行

MySQL的基础架构 首先就是客户端&#xff0c;其次Server服务层&#xff0c;大多数MySQL的核心服务都在这一层&#xff0c;包括连接、分析、优化、缓存以及所有的内置函数&#xff08;时间、日期、加密函数&#xff09;&#xff0c;所有跨存储引擎功能都在这一层实现&#xff1…