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中加入下面代码…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...
力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...
NPOI Excel用OLE对象的形式插入文件附件以及插入图片
static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...
Rust 开发环境搭建
环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行: rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu 2、Hello World fn main() { println…...
从零开始了解数据采集(二十八)——制造业数字孪生
近年来,我国的工业领域正经历一场前所未有的数字化变革,从“双碳目标”到工业互联网平台的推广,国家政策和市场需求共同推动了制造业的升级。在这场变革中,数字孪生技术成为备受关注的关键工具,它不仅让企业“看见”设…...
AD学习(3)
1 PCB封装元素组成及简单的PCB封装创建 封装的组成部分: (1)PCB焊盘:表层的铜 ,top层的铜 (2)管脚序号:用来关联原理图中的管脚的序号,原理图的序号需要和PCB封装一一…...
