05 OpenCV色彩空间处理
色彩空间(Color Space)是一种用于描述颜色的数学模型,它将颜色表示为多维向量或坐标,通常由三个或四个独立的分量来表示。不同的色彩空间在颜色的表示方式、可表达颜色的范围、计算速度和应用场景等方面存在差异,不同的色彩空间有不同的作用,主要包括以下几点:
-
色彩空间可以提高图像处理的准确性。例如,由于人类的视觉对亮度(L)和颜色(a、b)的感知不同,Lab色彩空间可以提高图像处理算法在颜色边缘的准确性。
-
色彩空间可以扩展可表示的颜色范围。例如,RGB色彩空间只能表示一部分可见光谱范围内的颜色,而HSV色彩空间可以表示更广泛的颜色范围,使得在计算机视觉和图像处理中更加灵活。
-
色彩空间可以降低计算复杂度。例如,在颜色量化和压缩中使用YUV色彩空间可以减少计算量,提高图像处理的速度。
-
色彩空间可以满足不同的应用需求。例如,RGB色彩空间广泛用于计算机显示器和数字相机中,HSV色彩空间用于图像分割和特征提取,YUV色彩空间用于视频编码和传输等。
常见的色彩空间包括RGB、HSV、HSL、Lab、YUV等,每种色彩空间都有其独特的特点和应用场景。选择合适的色彩空间可以更好地解决图像处理和计算机视觉中的问题,提高图像处理的效率和准确性。
1 色彩空间基础知识
1.1 GRAY色彩空间
GRAY是一种单通道的灰度色彩空间,其代表了图像中每个像素的亮度值(Luminance),而不考虑颜色的饱和度和色调。GRAY色彩空间的亮度值通常使用 8 位无符号整数来表示,取值范围为 0~255,其中 0 表示黑色,255 表示白色。
GRAY色彩空间广泛应用于图像处理、计算机视觉和机器学习等领域中。相比于其他色彩空间,GRAY色彩空间有以下几个优点:
-
GRAY色彩空间计算简单,只需考虑像素的亮度值,因此处理速度较快。
-
GRAY色彩空间对图像的光照变化、色彩变化等因素具有较好的鲁棒性。
-
GRAY色彩空间可以提取图像的纹理信息,对于纹理分析、边缘检测和形状识别等方面具有优势。
-
GRAY色彩空间可以被看作是其他色彩空间(如RGB、HSV等)的一种简化形式,可以方便地进行色彩空间的转换。
在使用GRAY色彩空间进行图像处理时,常用的操作包括图像增强、图像滤波、图像分割、形态学处理和特征提取等。例如,通过对GRAY色彩空间的图像应用滤波算法,可以去除图像中的噪声和干扰,提高图像质量和辨识度;通过对GRAY色彩空间的图像进行形态学处理,可以提取图像的轮廓和纹理信息,实现图像分割和形状识别等功能。
Gray与RGB的转换方式为:
gray=0.299R+0.587G+0.114Bgray = 0.299 R + 0.587 G + 0.114 B gray=0.299R+0.587G+0.114B
1.2 HSV色彩空间
HSV(Hue-Saturation-Value)是一种基于人类视觉感知的颜色模型,它将颜色表示为三维向量或坐标,其中包括色相(Hue)、饱和度(Saturation)和亮度(Value)三个分量。
-
色相(Hue)表示颜色的基本属性,是色彩的本质特征,可以用角度度量(0~360°),对应于色轮上的位置。常见的色相包括红、黄、绿、青、蓝、紫等。
-
饱和度(Saturation)表示颜色的纯度或深浅程度,是指该颜色与灰色的比例,取值范围为0~1。当饱和度为1时,颜色最鲜艳、最纯粹;当饱和度为0时,颜色最暗淡、最接近灰色。
-
亮度(Value)表示颜色的明暗程度,是指该颜色的亮度,取值范围为0~1。当亮度为1时,颜色最亮;当亮度为0时,颜色最暗。
HSV色彩空间的使用有以下优点:
-
相对于RGB色彩空间,HSV色彩空间更符合人类视觉感知,能更好地描述颜色的主要属性和纯度。
-
HSV色彩空间可更好地区分相似颜色,便于颜色选择、匹配和分类。
-
HSV色彩空间可以方便地调整颜色的属性,如改变色相、饱和度和亮度,实现图像增强、特效处理和色彩平衡等功能。
在图像处理、计算机视觉和计算机图形学等领域中,HSV色彩空间常用于图像分割、特征提取、目标跟踪、目标检测、图像检索等方面。例如,在基于颜色的目标跟踪中,可以使用HSV色彩空间提取出目标的颜色信息,结合运动模型进行跟踪。
2 色彩空间的Python操作
2.1 空间转换
使用cv2.cvtColor()函数实现色彩空间的转换。
cv2.cvtColor() 是 OpenCV 中用于颜色空间转换的函数,它可以将一幅图像从一个颜色空间转换到另一个颜色空间。
cv2.cvtColor(src, code[, dst[, dstCn]]) 函数的参数说明如下:
src:需要转换的原始图像,可以是 numpy 数组、Mat 对象或图像文件名。code:颜色空间转换的标志,可以使用预定义的颜色空间标志,如cv2.COLOR_BGR2GRAY表示将 BGR 色彩空间转换为 GRAY 色彩空间;也可以使用任意的两个自定义颜色空间的转换标志,如cv2.COLOR_RGB2HSV表示将 RGB 色彩空间转换为 HSV 色彩空间。dst:可选参数,表示输出图像,其类型与原始图像的类型相同。dstCn:可选参数,表示输出图像的通道数,当源图像和目标图像的通道数不同时,需要指定该参数。
cv2.cvtColor() 函数常用的颜色空间转换标志包括:
cv2.COLOR_BGR2GRAY:将 BGR 色彩空间转换为 GRAY 色彩空间。cv2.COLOR_BGR2RGB:将 BGR 色彩空间转换为 RGB 色彩空间。cv2.COLOR_BGR2HSV:将 BGR 色彩空间转换为 HSV 色彩空间。cv2.COLOR_RGB2GRAY:将 RGB 色彩空间转换为 GRAY 色彩空间。cv2.COLOR_RGB2BGR:将 RGB 色彩空间转换为 BGR 色彩空间。cv2.COLOR_RGB2HSV:将 RGB 色彩空间转换为 HSV 色彩空间。cv2.COLOR_GRAY2BGR:将 GRAY 色彩空间转换为 BGR 色彩空间。cv2.COLOR_HSV2BGR:将 HSV 色彩空间转换为 BGR 色彩空间。
2.2 按颜色提取
cv2.inRange() 是 OpenCV 中用于提取图像中特定颜色区域的函数,它可以将一幅图像中所有颜色值在特定范围内的像素提取出来,生成一个二值掩模(mask)。
cv2.inRange(src, lowerb, upperb[, dst]) 函数的参数说明如下:
src:输入图像,可以是 numpy 数组、Mat 对象或图像文件名。lowerb:代表颜色范围下限的数组或标量值,形状与输入图像相同。使用HSV格式。upperb:代表颜色范围上限的数组或标量值,形状与输入图像相同。使用HSV格式。dst:可选参数,表示输出的二值掩模,其大小与输入图像相同。
cv2.inRange() 函数的工作原理是,对于输入图像的每个像素,将其颜色值与 lowerb 和 upperb 定义的颜色范围进行比较。如果该像素的颜色值在范围内,则该像素在输出的二值掩模中对应的像素值为 255,否则为 0。因此,输出的二值掩模中的像素值只有 0 和 255 两种取值。通过生成的掩膜,可以实现对图像的提取。
实例代码如下
import cv2
import numpy as np # 读入图像
img = cv2.imread('lenacolor.png') # 定义红色区域的范围
lower_red = np.array([0, 0, 150])
upper_red = np.array([100, 100, 255]) # 提取红色区域
mask = cv2.inRange(img, lower_red, upper_red) # 将掩模应用到原图像
result = cv2.bitwise_and(img, img, mask=mask) # 显示结果
cv2.imshow('original', img)
cv2.imshow('mask', mask)
cv2.imshow('result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()

相关文章:
05 OpenCV色彩空间处理
色彩空间(Color Space)是一种用于描述颜色的数学模型,它将颜色表示为多维向量或坐标,通常由三个或四个独立的分量来表示。不同的色彩空间在颜色的表示方式、可表达颜色的范围、计算速度和应用场景等方面存在差异,不同的…...
【CS224图机器学习】task1 图机器学习导论
前言:本期学习是由datawhale(公众号)组织,由子豪兄讲解的202302期CS224图机器学习的学习笔记。本次学习主要针对图机器学习导论做学习总结。1.什么是图机器学习?通过图这种数据结构,对跨模态数据进行整理。…...
Powershell Install SQL Server 2022
前言 SQL Server 2022 (16.x) 在早期版本的基础上构建,旨在将 SQL Server 发展成一个平台,以提供开发语言、数据类型、本地或云环境以及操作系统选项。 SQL Server Management Studio (SSMS) 是一种集成环境,用于管理从 SQL Server 到 Azure SQL 数据库的任何 SQL 基础结构…...
Jetson NX2 装机过程
1.固态硬盘安装完成后,系统配置 df -h 查看硬盘使用情况 2.查看Jetson NX的IP地址,以下两个都行 ifconfig ip address show 3.Jetson NX2安装arm64的annaconda3,安装有问题报错illegal instruction,未解决。 4.VNC远程登录 …...
初始C++(四):内联函数
文章目录一.内联函数概念二.内联函数用法三.内联函数的特性四.内联函数和宏一.内联函数概念 以inline修饰的函数叫做内联函数,编译时C编译器会在调用内联函数的地方展开,没有函数调用建立栈帧的开销,内联函数提升程序运行的效率。 二.内联函…...
九、初识卷积
文章目录1、通过边缘检测认识卷积2、Padding3、Strid Convelution4、RGB图像的卷积THE END1、通过边缘检测认识卷积 \qquad在使用神经网络进行图像识别时,神经网络的前几层需要完成对图像的边缘检测任务,所谓的边缘检测就是让计算机识别出一张图片的垂直…...
【Linux】【编译】编译调试过程中如何打印出实际的编译命令
🐚作者简介:花神庙码农(专注于Linux、WLAN、TCP/IP、Python等技术方向)🐳博客主页:花神庙码农 ,地址:https://blog.csdn.net/qxhgd🌐系列专栏:Linux技术&…...
linux安装jdk
step1 下载jdk 到下面的网站下载需要的jdk安装包版本。 Java Downloads | Oracle step2 复制到opt目录 其中user_name对应自己的home目录的用户文件夹 sudo cp /home/user_name//home/czh/Downloads/jdk-17_linux-x64_bin.tar.gz /opt/ step3 到opt目录解压安装包…...
迅为iTOP-3A5000龙芯开发板安装UOS操作系统
3A5000板卡采用全国产龙芯3A5000处理器,基于龙芯自主指令系统(LoongArch),市面上龙芯3A5000主板价格都在上万元,可以说是非常贵了, 迅为全新推出了款千元内的iTOP-3A5000开发板,这款板卡各方面的配置也是第…...
Firefox 110, Chrome 110, Chromium 110 官网离线下载 (macOS, Linux, Windows)
Mozilla Firefox, Google Chrome, Chromium, Apple Safari 请访问原文链接:https://sysin.org/blog/chrome-firefox-download/,查看最新版。原创作品,转载请保留出处。 作者主页:www.sysin.org 天下只剩三种(主流&am…...
如何使用ArcGIS转换坐标
1.概述大家都知道ArcGIS提供了坐标转换功能,在我们手里的数据坐标系千差万别,经常会遇到转换坐标的时候,那么是否可以用ArcGIS进行转换?答案是肯定的,但是转换的过程比较复杂,这里为大家介绍一下转换的方法…...
链表基本原理
链表基本原理1.链表1.1 基本原理1.2 链表大O记法表示2. 链表操作2.1 读取2.2 查找2.3 插入2.4 删除3.链表代码实现1.链表 1.1 基本原理 节点 组成链表的数据格子不是连续的。可以分布在内存的各个位置。这种不相邻的格子就叫结点。每个结点保存数据还保存着链表里的下一结点的…...
基于JAVA+SpringBoot+Vue+ElementUI中学化学实验室耗材管理系统
✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目背景介绍: 当前,中学…...
1.输入子系统学习-struct input_dev-2023.02
内核版本:4.4.194 平台相关:rk3399 目前主要是看的触摸屏的代码 目录 一、include/linux/input.h(struct_input_dev) 二、结构体的注释部分(百度翻译) 三、Documentation/input/event-codes.txt&…...
解决:PDFBox报的java.io.IOException: Missing root object specification in trailer
文章目录问题描述原因分析解决方案问题描述 使用pdfbox类库操作pdf文件时,遇到下面的报错信息: java.io.IOException: Missing root object specification in trailer PDFBox参考: https://pdfbox.apache.org/ Apache PDFBox 库是一个开源的…...
MAC OSX安装Python环境 + Visual Studio Code
MAC上开发python怎么能少得了python3环境呢,而安装python3环境的方式也有多种,这里仅选用并记录本人认为比较方便的方式 安装Homebrew Homebrew是macOS 缺失的软件包管理器, 使用它可以在MAC上安装很多没有预装的东西,详细说明可…...
音乐 APP 用户争夺战,火山引擎 VeDI 助力用户体验升级!
更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,并进入官方交流群 国内数字音乐市场正在保持稳定增长。 根据华经产业研究院数据报告显示,2020 年数字音乐市场规模为 357.3 亿元,到 2022 年市场规模已增长至 482.7 …...
CAP和BASE理论
CAP理论CAP是 Consistency、Availability、Partition tolerance 三个词语的缩写,分别表示一致性、可用性、分区容忍性。它指出一个分布式计算系统不可能同时满足以下三点:• 一致性(Consistency) :等同于所有节点访问同…...
基于商品理解的成交能力和成交满意度优化在Lazada的实践
作者:马蕊 Lazada推荐算法团队 在Lazada各域推荐场景中,既有优质商品优质卖家不断涌现带来的机会,也有商品质量参差带来的问题。如何才能为用户提供更好的体验,对卖家变化行为进行正向激励呢?下面本文将为大家分享我们…...
idea推送镜像到desktop报错:Cannot run program “docker-credential-desktop“ 系统找不到指定的文件。
windows Docker 搭建仓库 打开docker desktop 。 打开windows cmd窗口或powershell窗口。 输入"docker run -d -p 5000:5000 --name test registry:2 "运行一个名字叫test的registry容器。 idea配置springboot项目的docker插件 在pom.xml中的plugins中加入下面代码…...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
深入浅出Diffusion模型:从原理到实践的全方位教程
I. 引言:生成式AI的黎明 – Diffusion模型是什么? 近年来,生成式人工智能(Generative AI)领域取得了爆炸性的进展,模型能够根据简单的文本提示创作出逼真的图像、连贯的文本,乃至更多令人惊叹的…...
【UE5 C++】通过文件对话框获取选择文件的路径
目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 ,这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器,右键点击 .uproject 文件,选择 "Generate Visual Studio project files",重…...
人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型
在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重,适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解,并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...
数据库——redis
一、Redis 介绍 1. 概述 Redis(Remote Dictionary Server)是一个开源的、高性能的内存键值数据库系统,具有以下核心特点: 内存存储架构:数据主要存储在内存中,提供微秒级的读写响应 多数据结构支持&…...
