RGB 转HSV空间颜色寻找色块
文章目录
- 前言
- 一、绿色确定
- 二、红色确定
- 总结
前言
提示:这里可以添加本文要记录的大概内容:
项目需要:
将RGB颜色空间转换为HSV颜色空间以寻找颜色,主要基于以下几个原因:
-
直观性:
HSV颜色空间更符合人类对颜色识别的直观性。在HSV中,H(色调)代表颜色本身,S(饱和度)代表颜色的纯度,V(明度)代表颜色的亮度。这种分离使得颜色的描述更加直观,便于进行颜色特征的提取和处理。相比之下,RGB颜色空间是通过红、绿、蓝三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,对于人类来说,直接从RGB值判断颜色并不直观。 -
颜色分割:
HSV颜色空间在进行色彩分割时具有显著优势。通过设定色调(H)的阈值,可以很容易地将特定颜色从图像中分割出来。例如,要提取红色区域,只需设置色调在0°(或360°)附近的阈值即可。而RGB颜色空间中的颜色分割则相对复杂,因为不同颜色在RGB空间中的分布是连续的,难以通过简单的阈值进行分割。 -
光照不变性:
HSV颜色空间在一定程度上对光照变化具有鲁棒性。由于V(明度)通道表示颜色的亮度,因此可以通过调整V的值来适应不同的光照条件。这在进行颜色识别时非常有用,因为光照变化往往会影响图像的亮度,但不会改变颜色的本质特征。相比之下,RGB颜色空间对光照变化较为敏感,因为RGB值直接反映了像素的亮度信息。 -
计算效率:
在某些情况下,HSV颜色空间可能具有更高的计算效率。例如,在进行颜色特征提取时,由于HSV颜色空间的直观性和分离性,可以使用更简单的算法来提取颜色特征。而RGB颜色空间则需要更复杂的算法来处理颜色特征提取问题。
综上所述,将RGB颜色空间转换为HSV颜色空间以寻找颜色具有诸多优势。这种转换不仅提高了颜色识别的准确性和效率,还使得颜色特征的提取和处理更加直观和方便。因此,在图像处理、计算机视觉和机器视觉等领域中,HSV颜色空间得到了广泛应用。
一、绿色确定
// 这里以绿色为例,你可以根据需要调整这些值
cv::Scalar lowerBound(35, 40, 40); // 下界(HSV)
cv::Scalar upperBound(85, 255, 255); // 上界(HSV)
在HSV(Hue, Saturation, Value)颜色空间中,绿色的范围并不是固定的,它取决于多种因素,包括光照条件、摄像头的白平衡设置、以及你想要识别的绿色色调的具体类型(比如深绿、浅绿、草绿等)。
在上面的代码中,给出的绿色范围(lowerBound
和 upperBound
)是一个相对宽泛的界定,用于捕捉大多数常见的绿色色调。这里的值是基于HSV颜色空间中的色调(Hue)、饱和度(Saturation)和明度(Value)来设定的:
-
Hue(色调):色调表示颜色的类型,从0到179(在OpenCV中,HSV的色调是循环的,所以180和0是相等的)。绿色的色调通常落在35到85之间(这个范围可能会根据具体情况有所变化)。
-
Saturation(饱和度):饱和度表示颜色的纯度,从0(灰色)到255(完全饱和)。在上面的例子中,饱和度的下界被设置为40,以排除过于灰暗的颜色(这些颜色可能由于光照不足或物体表面反射率低而显得不饱和)。上界被设置为255,以包括所有饱和的绿色。
-
Value(明度):明度表示颜色的亮度,也从0(黑色)到255(白色)。在这个例子中,明度的上下界都被设置为相对较高的值(40到255),以包括从较暗到较亮的绿色。然而,你也可以根据需要调整这些值来适应不同的光照条件。
需要注意的是,这些值并不是绝对的,而是根据经验和实验来确定的。在实际应用中,你可能需要根据你的具体需求和环境条件来调整这些值。例如,如果你正在处理一个户外场景,并且阳光充足,你可能需要调整这些值来适应更高的明度和不同的色调。相反,如果你正在处理一个室内场景,并且光照不足,你可能需要降低明度的下界来包括更暗的颜色。
二、红色确定
在OpenCV的C++环境中,为了定义一个用于提取红色区域的HSV掩码,你需要首先确定红色的HSV范围,然后利用cv::inRange
函数来生成这个掩码。以下是一个具体的例子,展示了如何定义红色的HSV范围并生成相应的掩码:
#include <opencv2/opencv.hpp>int main() {// 读取图像cv::Mat image = cv::imread("your_image.jpg");// 检查图像是否加载成功if (image.empty()) {std::cerr << "Error: Could not load image!" << std::endl;return -1;}// 转换图像到HSV颜色空间cv::Mat hsvImage;cv::cvtColor(image, hsvImage, cv::COLOR_BGR2HSV);// 定义红色的HSV范围// 注意:HSV的范围是H: 0-179, S: 0-255, V: 0-255// 红色通常位于H: 0-10 和 H: 160-179(近似),但这里我们仅考虑0-10的情况cv::Scalar lowerBound(0, 100, 50); // 下界(HSV):色调0-10,饱和度100,明度50cv::Scalar upperBound(10, 255, 255); // 上界(HSV):色调10,饱和度255,明度255// 创建一个掩码来提取红色区域cv::Mat mask;cv::inRange(hsvImage, lowerBound, upperBound, mask);// 如果你还想包括接近179到0过渡的红色(即循环的红色部分),你可以这样做:// 但是,由于HSV的色调是循环的,你需要将两个范围分开处理,然后合并结果// 这里我们为了简单起见,只处理0-10的范围// 使用掩码来提取红色区域(可选,仅用于显示或进一步处理)cv::Mat redRegion;image.copyTo(redRegion, mask);// 显示原始图像和红色区域cv::imshow("Original Image", image);cv::imshow("Red Region", redRegion);// 等待按键事件以关闭窗口cv::waitKey(0);return 0;
}
在这个例子中,lowerBound
和upperBound
定义了红色的HSV范围。cv::inRange
函数会检查hsvImage
中的每个像素,如果它的HSV值在这个范围内,则掩码mask
中对应的像素会被设置为255(白色),否则会被设置为0(黑色)。
请注意,由于光照条件、摄像头白平衡以及你想要识别的红色色调的具体类型,你可能需要调整lowerBound
和upperBound
中的值。特别是色调(Hue)的值,它们决定了哪些颜色会被认为是红色。在这个例子中,我们仅考虑了色调为0到10的情况,但实际应用中可能还需要包括接近179到0过渡的部分(即HSV色调的循环特性),这通常需要额外的逻辑来处理。
241
206.5
184.5
175
184
149
x= 241
y= 206.5
x= 184.5
y= 175
x= 184
y= 149
x= 240
y= 206
width= 2
height= 1
x= 159
y= 149
width= 51
height= 52
x= 176
y= 148
width= 16
height= 2
x= 184.5
y= 175
总结
学习使人快乐!
音乐使人愉悦!
日积月累使人充实和自信!
相关文章:
RGB 转HSV空间颜色寻找色块
文章目录 前言一、绿色确定二、红色确定总结 前言 提示:这里可以添加本文要记录的大概内容: 项目需要: 将RGB颜色空间转换为HSV颜色空间以寻找颜色,主要基于以下几个原因: 直观性: HSV颜色空间更符合人类…...
Kafka生产者ACK参数与同步复制
目录 生产者的ACK参数 ack等于0 ack等于1(默认) ack等于-1或all Kafka的同步复制 使用误区 生产者的ACK参数 Kafka的ack机制可以保证生产者发送的消息被broker接收成功。 Kafka producer有三种ack机制 ,分别是 0,1…...
计算机图形学试题整理(期末复习/闭or开卷/>100道试题/知识点)
1.各种坐标变换,会产生变换前后维度改变的是(投影变换)。 A)建模变换;B)观察变换;C)投影变换;D)视口变换 不同的坐标变换对维度的影响如下: 建模…...
Ubuntu 24.04 安装 NVIDIA Container Toolkit 全指南:让Docker拥抱GPU
Ubuntu 24.04 安装 NVIDIA Container Toolkit 全指南:让Docker拥抱GPU 前言一、环境准备1.1 验证驱动状态 二、安装NVIDIA Container Toolkit2.1 添加官方仓库2.2 执行安装 三、配置Docker运行时3.1 更新Docker配置 四、验证安装结果4.1 运行测试容器 五、实战应用 …...
python3+TensorFlow 2.x(三)手写数字识别
目录 代码实现 模型解析: 1、加载 MNIST 数据集: 2、数据预处理: 3、构建神经网络模型: 4、编译模型: 5、训练模型: 6、评估模型: 7、预测和可视化结果: 输出结果ÿ…...
aws(学习笔记第二十六课) 使用AWS Elastic Beanstalk
aws(学习笔记第二十六课) 使用aws Elastic Beanstalk 学习内容: AWS Elastic Beanstalk整体架构AWS Elastic Beanstalk的hands onAWS Elastic Beanstalk部署node.js程序包练习使用AWS Elastic Beanstalk的ebcli 1. AWS Elastic Beanstalk整体架构 官方的guide AWS…...
GestureDetector组件的功能与用法
文章目录 1 概念介绍2 使用方法3 示例代码 我们在上一章回中介绍了ListView响应事件的内容,本章回中将介绍GestureDetector Widget.闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 我们在这里介绍的GestureDetector是一个事件响应Widget,它可以响应双击事件&…...
【HuggingFace项目】:Open-R1 - DeepSeek-R1 大模型开源复现计划
项目链接:https://github.com/huggingface/open-r1 概述 Open-R1 是由 HuggingFace 发布的一个完全开放的项目,旨在通过三个主要步骤复现 DeepSeek-R1 的完整训练流程。这个项目的目标是让更多人能够理解和使用 DeepSeek-R1 的技术方案,从而…...
K8S中数据存储之配置存储
配置存储 在Kubernetes中,ConfigMap和Secret是两种核心资源,用于存储和管理应用程序的配置数据和敏感信息。理解它们的功能和最佳实践对于提高Kubernetes应用程序的安全性和配置管理的效率至关重要。 ConfigMap ConfigMap是一种API对象,允许…...
群辉折腾日记【连续剧】
安装群辉6.23版本 对比不同的版本以及自己的硬件条件,我选择了6.2.3稳定养老版本,硬件参数可以看之前的文章:pve (群辉、软路由、win/linux)折腾日记 之前年轻气盛喜欢折腾,秉持着一个原则,可以不用,但不能…...
AIGC视频生成模型:慕尼黑大学、NVIDIA等的Video LDMs模型
大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本文详细介绍慕尼黑大学携手 NVIDIA 等共同推出视频生成模型 Video LDMs。NVIDIA 在 AI 领域的卓越成就家喻户晓,而慕尼黑大学同样不容小觑,…...
Hadoop 与 Spark:大数据处理的比较
💖 欢迎来到我的博客! 非常高兴能在这里与您相遇。在这里,您不仅能获得有趣的技术分享,还能感受到轻松愉快的氛围。无论您是编程新手,还是资深开发者,都能在这里找到属于您的知识宝藏,学习和成长…...
VB6.0 显示越南语字符
近期接到客户咨询,说是VB6.0写软件界面上显示越南语乱码,需要看看怎样解决。 我在自己电脑上也试了下,确实显示越南语结果是乱码。编辑器里乱码,运行起来界面上也是乱码。 经过一天的折腾,算是解决了问题,…...
微信小程序中实现进入页面时数字跳动效果(自定义animate-numbers组件)
微信小程序中实现进入页面时数字跳动效果 1. 组件定义,新建animate-numbers组件1.1 index.js1.2 wxml1.3 wxss 2. 使用组件 1. 组件定义,新建animate-numbers组件 1.1 index.js // components/animate-numbers/index.js Component({properties: {number: {type: Number,value…...
网络仿真工具Core环境搭建
目录 安装依赖包 源码下载 Core安装 FAQ 下载源码TLS出错误 问题 解决方案 找不到dbus-launch 问题 解决方案 安装依赖包 调用以下命令安装依赖包 apt-get install -y ca-certificates git sudo wget tzdata libpcap-dev libpcre3-dev \ libprotobuf-dev libxml2-de…...
JavaScript 的 Promise 对象和 Promise.all 方法的使用
JavaScript 中的 Promise 对象 什么是 Promise? Promise 是一种用于处理异步操作的对象。它代表一个尚未完成但预计将来会完成的操作及其结果。 主要特点: 状态: Pending(进行中): 初始状态,既未成功,也未失败。Fu…...
农产品价格报告爬虫使用说明
农产品价格报告爬虫使用说明 # ************************************************************************** # * * # * 农产品价格报告爬虫 …...
Java 大视界 -- Java 大数据中的隐私增强技术全景解析(64)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
实战Linux Swap扩展分区
文章目录 定义命令格式案例注释 定义 Swap分区是Linux系统中的一种虚拟内存实现方式,它是磁盘上预留的专用区域。当系统的物理内存不足时,会将部分不活跃的数据从物理内存移动到Swap分区,从而释放更多可用内存空间。 命令格式 关闭Swap分区…...
doris:Parquet导入数据
本文介绍如何在 Doris 中导入 Parquet 格式的数据文件。 支持的导入方式 以下导入方式支持 Parquet 格式的数据导入: Stream LoadBroker LoadINSERT INTO FROM S3 TVFINSERT INTO FROM HDFS TVF 使用示例 本节展示了不同导入方式下的 Parquet 格式使用方法…...
Synology 群辉NAS安装(6)安装mssql
Synology 群辉NAS安装(6)安装mssql 写在前面mssql 2019:成功安装说明,这个最终成功了 mssql 2022没有成功1. pull image2.启动mssql docker container 远程连接 写在前面 mssq是一个重要节点。 这是因为我对mysql没有一丝好感。虽然接触了许…...
使用.NET 8构建高效的时间日期帮助类
使用.NET 8构建高效的时间日期帮助类 在现代Web应用程序中,处理日期和时间是一个常见的需求。无论是记录日志、生成报告还是进行数据分析,正确处理日期和时间对于确保数据的准确性和一致性至关重要。本文将详细介绍如何使用ASP.NET Core和C#构建一个高效…...
第26篇 基于ARM A9处理器用C语言实现中断<二>
Q:基于ARM A9处理器怎样编写C语言工程,使用按键中断将数字显示在七段数码管上呢? A:基本原理:主程序需要首先调用子程序set_A9_IRQ_stack()初始化IRQ模式的ARM A9堆栈指针;然后主程序调用子程序config_GIC…...
dm8在Linux环境安装精简步骤说明(2024年12月更新版dm8)
dm8在Linux环境安装详细步骤 - - 2025年1月之后dm8 环境介绍1 修改操作系统资源限制2 操作系统创建用户3 操作系统配置4 数据库安装5 初始化数据库6 实例参数优化7 登录数据库配置归档与备份8 配置审计9 创建用户10 屏蔽关键字与数据库兼容模式11 jdbc连接串配置12 更多达梦数据…...
Nginx部署的前端项目刷新404问题
1,查看问题 我部署的81端口是监听tlias项目的,我直接访问端口页面可以出现内容。 我在浏览器舒服端口之后回车,会重定向页面。但是我在重定向之后的页面刷新浏览器就会出现404的问题。 下面是刷新浏览器后的效果 2,在nginx.cnf …...
H2 Database安装部署
H2 Database H2 Database官网 H2 中文文档 安装部署H2 java版本要高于java 11 ## 下载java21 wget https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.tar.gz[rootlocalhost ~]# tar xf jdk-21_linux-x64_bin.tar.gz -C /usr/local/ [rootlocalhost ~]# vi…...
Day40:列表的排序
在 Python 中,排序是处理列表数据时常用的一种操作。排序可以帮助我们按照一定的规则(如升序或降序)对列表中的元素进行排列。Python 提供了内置的排序方法 sort() 和 sorted() 来实现这一功能。 1. 使用 sort() 方法排序 1.1 sort() 方法简…...
TypeScript进阶(三):断言
文章目录 一、前言二、类型断言2.1 利用 as 实现断言2.2 利用 <> 实现断言2.3 应用示例2.3.1 如果 A,B 如果是类并且有继承关系2.3.2 如果 A,B 如果是类,但没有继承关系2.3.3 如果 A 是类,B 是接口,并且 A 类实现…...
塔罗牌(基础):大阿卡那牌
塔罗牌(基础) 大啊卡那牌魔术师女祭司皇后皇帝教皇恋人战车力量隐士命运之轮正义吊人死神节制恶魔高塔星星月亮太阳审判世界 大啊卡那牌 魔术师 作为一个起点,象征:意识行动和创造力。 一个【显化】的概念,即是想法变…...
微服务(一)
文章目录 项目地址一、微服务1.1 分析User的Domian Verb和Nouns 二、运行docker和k8s2.1 Docker1. 编写dockerfile2. 创建docker image3. 运行docker使用指定端口4. 查看当前运行的镜像5. 停止当前所有运行的docker6. 删除不用的docker images7. 将本地的image上传到hub里 2.2 …...
JAVA(SpringBoot)集成Kafka实现消息发送和接收。
SpringBoot集成Kafka实现消息发送和接收。 一、Kafka 简介二、Kafka 功能三、POM依赖四、配置文件五、生产者六、消费者 君子之学贵一,一则明,明则有功。 一、Kafka 简介 Kafka 是由 Apache 软件基金会开发的一个开源流处理平台,最初由 Link…...
Oracle之开窗函数使用
开窗函数是数据开发面试的必知必会,必须认真对待,上难度: 开窗函数语法格式如下,一共五部分: ①函数(a)over(②<partition by b> ③<order by c> ④<windowing_clause> ⑤开窗范围)1、函数…...
mysql_store_result的概念和使用案例
mysql_store_result() 是 MySQL C API 中的一个函数,用于检索一个完整的结果集到一个客户端。当执行一个查询(通常是 SELECT 查询)并希望处理所有返回的数据时,可以使用此函数。 概念 mysql_store_result() 函数的原型如下&…...
【大数据】数据治理浅析
在数字化时代,数据作为企业的核心资产,其管理和利用显得尤为关键。数据治理,作为数据管理的重要组成部分,旨在确保数据的准确性、一致性、安全性和可用性。本文将从数据治理的基本概念、应用场景、必要性、需求分析等方面出发&…...
第 25 场 蓝桥月赛
4.喜糖摆放【算法赛】 - 蓝桥云课 问题描述 在过年时,蓝桥村的孩子们充满活力,他们化身为捣蛋鬼,挨家挨户寻讨喜糖。他们一共收到了N颗糖,每颗糖的甜度各不相同,第i颗糖的甜度为Ai。 然而,如何分配这些喜…...
LigerUI在MVC模式下的响应原则
LigerUI是基于jQuery的UI框架,故他也是遵守jQuery的开发模式,但是也具有其特色的侦听函数,那么当LigerUI作为View层的时候,他所发送后端的必然是表单的数据,在此我们以俩个div为例: {Layout "~/View…...
Vue2下篇
插槽: 基本插槽: 普通插槽:父组件向子组件传递静态内容。基本插槽只能有一个slot标签,因为这个是默认的位置,所以只能有一个 <!-- ParentComponent.vue --> <template> <ChildComponent> <p>…...
python 变量范围的定义与用法
文章目录 1. 局部变量(Local Scope)示例: 2. 嵌套函数变量(Enclosing Scope)示例:说明: 3. 全局变量(Global Scope)示例:说明: 4. 内置变量&#…...
for...in 和 Object.keys().forEach的区别
for…in 和 Object.keys().forEach的区别 1、遍历范围: for…in 会遍历 自身及原型链上的可枚举属性,需用 hasOwnProperty 过滤。 Object.keys() 仅遍历 自身可枚举属性,更安全。 // 定义一个父对象,包含原型链上的属性 const…...
API接口设计模板
API 员工登录接口设计 基本信息 Path: /admin/staff/login **Method:**POST 接口描述: 请求参数 Query 参数名称是否必须示例备注username是admin用户名password是mima密码 返回数据 名称类型是否必须默认值备注其他信息codeinteger必须dat…...
新电脑安装系统找不到硬盘原因和解决方法来了
有不少网友反馈新电脑采用官方u盘方式装win10或win100出现找不到硬盘是怎么回事?后来研究半天发现是bios中开启了rst(vmd)模式。如果关闭rst模式肯定是可以安装的,但这会影响硬盘性能,有没有办法解决开启rst模式的情况安装win10或win11呢&…...
”彩色的验证码,使用pytesseract识别出来的验证码内容一直是空“的解决办法
问题:彩色的验证码,使用pytesseract识别出来的验证码内容一直是空字符串 原因:pytesseract只识别黑色部分的内容 解决办法:先把彩色图片精确转换成黑白图片。再将黑白图片进行反相,将验证码部分的内容变成黑色&#…...
网站上的图片无法使用右键“图片另存为”
某些网站想要下载图片,无法使用右键“图片另存为”,网站截获了鼠标右键的快捷键,没法弹出右键菜单。 可以打开“开发者工具”,使用“Elements”面板找到这个元素,在元素上右键,选择“Open in new tab” 结…...
Linux:生产者消费者模型
一、普通生产者消费者模型 1.1 什么是生产者消费者模型 现实生活中,我们也会有像生物世界的生产者和消费者的概念,但是我们的消费者在大多数情况下并不和生产者直接联系,就比如说食物,不能说我今天去找供货商要十个面包ÿ…...
网络安全 | F5-Attack Signatures详解
关注:CodingTechWork 关于攻击签名 攻击签名是用于识别 Web 应用程序及其组件上攻击或攻击类型的规则或模式。安全策略将攻击签名中的模式与请求和响应的内容进行比较,以查找潜在的攻击。有些签名旨在保护特定的操作系统、Web 服务器、数据库、框架或应…...
自然元素有哪些选择?
在设计浪漫风格的壁纸时,自然元素是营造温馨、梦幻氛围的关键。以下是一些常见的自然元素选择,以及它们在壁纸设计中建议: 一、花朵 玫瑰: 特点:玫瑰是浪漫的象征,尤其是红色和粉色玫瑰,能够传…...
基于微信阅读网站小程序的设计与实现(LW+源码+讲解)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
linux挂载新硬盘,查看新硬盘,格式化分区,创建挂载点,挂载逻辑卷,整盘方式挂载,LVM方式挂载,查看linux 磁盘卷组的剩余空间,ext4与xfs区别
摘要 挂载新硬盘,本文作者整理了几乎所有相关的知识点 作者采用的是本文第二种挂载方式(LVM),只用了下面6条命令搞定 # 说明: # /dev/mapper/appvg-mylv1 逻辑卷完整名称 # # /dev/mapper目录是Linux系统中用…...
Web3.0时代的挑战与机遇:以开源2+1链动模式AI智能名片S2B2C商城小程序为例的深度探讨
摘要:Web3.0作为互联网的下一代形态,承载着去中心化、开放性和安全性的重要愿景。然而,其高门槛、用户体验差等问题阻碍了Web3.0的主流化进程。本文旨在深入探讨Web3.0面临的挑战,并提出利用开源21链动模式、AI智能名片及S2B2C商城…...
AIGC专栏18——EasyAnimateV5.1版本详解 应用Qwen2 VL作为文本编码器,支持轨迹控制与相机镜头控制
AIGC专栏18——EasyAnimateV5.1版本详解 应用Qwen2 VL作为文本编码器,支持轨迹控制与相机镜头控制 学习前言相关地址汇总源码下载地址HF测试链接MS测试链接 测试效果Image to VideoText to Video轨迹控制镜头控制 EasyAnimate详解技术储备Qwen2 VLStable Diffusion …...