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的转换方式为:
g r a y = 0.299 R + 0.587 G + 0.114 B gray = 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色彩空间处理相关推荐
- Opencv色彩空间(GRAY、XYZ、HSV、YCrCb、HLS)展示,以及利用HSV标记指定的颜色
本文简单介绍了几个常见的色彩空间转换: 因为HSV应用非常广泛,所以单独介绍其强大的功能: 本文用到的两个原始图像,如下图所示: 目录 一.Opencv色彩空间(GRAY.XYZ.HSV.YCrCb. ...
- OpenCV实战(7)——OpenCV色彩空间转换
OpenCV实战(7)--OpenCV色彩空间转换 0. 前言 1. RGB 色彩空间 2. 色彩空间转换 2.1 CIE L*a*b* 色彩空间 2.2 其它色彩空间 3. 用色调.饱和度和亮度表示 ...
- 树莓派视觉小车 -- 小球追踪(颜色追踪)(OpenCV色彩空间HSV)
目录 效果展示 基础理论(HSV) 为什么用HSV空间而不是RGB空间? HSV 1.Hue(色相) 2.Value(明度) 3.Saturation(饱和度) 一.初始化 滑动条初始化 1.创建回调 ...
- python怎么编写视觉识别_Python视觉识别--OpenCV色彩空间\图像运算\ROI(四)
(七) 色彩空间 什么是色彩空间,人们建立了多种色彩模型,以一维.二维.三维甚至四维空间坐标来表示某一色彩,这种坐标系统所能定义的色彩范围即色彩空间 色彩空间有很多,但是常用的色彩空间一共5种:RGB ...
- openCV色彩空间转换
RGB 人眼的色彩空间 BGR opencv默认使用的色彩空间 他们的最大差别是R,B排列顺序不一样,若是把RGB直接放入opencv系统中会造成颜色有差异. 给opencv的数据是要BGR的,电脑内 ...
- opencv色彩空间类型转换(python)
色彩空间类型转换 色彩空间类型转换 色彩空间基础 GRAY色彩空间 XYZ色彩空间 YCrCb色彩空间 HSV色彩空间 HLS色彩空间 CIEL*a*b*色彩空间 CIEL*u*v*色彩空间 Baye ...
- OpenCV 色彩空间的改变
OpenCV中有150多种颜色空间转换方法.最广泛使用的转换方法有两种,BGR与Gray之间的转换和BGR与HSV之间的转换. cv.cvtColor(input_image, flag) input ...
- OpenCV色彩空间类型
1.三基色模式: RGB颜色空间以R(Red:红).G(Green:绿).B(Blue:蓝)三种基本色为基础,进行不同程度的叠加,产生丰富而广泛的颜色,所以俗称三基色模式. 2.空间模型 RGB颜色空 ...
- [python opencv 计算机视觉零基础到实战] 四、了解色彩空间及其详解
一.学习目标 了解什么是色彩空间 了解opencv中色彩空间的转换 目录 [python opencv 计算机视觉零基础到实战] 一.opencv的helloworld [[python opencv ...
最新文章
- 规则管理_看板管理的五大使用规则
- c++ vector 一部分_C++逆向学习(二) vector
- NR 5G 身份标识
- 【Spark Summit East 2017】BigDL:Spark上的分布式深度学习库
- 使用sql server中的全文索引
- tilecache2.11在windows apache2.22安装部署
- 面向.NET开发人员的Dapr——发布和订阅
- 将jOOQ与Spring结合使用:配置
- ASP.NET MVC 音乐商店 - 6. 使用 DataAnnotations 进行模型验证
- php 观察者模式怎么用,php怎么实现观察者模式
- Mysql windows安装说明
- 网友反映摩拜单车无法扫码 回应:系技术问题 现已恢复服务
- 使用反射获得jar包中的类、方法、参数、返回值类型,然后动态加载jar包运行方法
- python如何问问题_Python简单问答程序如何解决问题循环
- 【​观察】中国云计算产业的下半场 京东云正在下一盘怎样的大棋?
- 以人为本 体验至上(三)
- 在Excel中通过VBA实现不定区域的标准差计算
- os 修改文件夹 名_如何在OS X中更改文件夹和应用程序图标
- Sql Server 经典网站
- 人群计数-SaCNN论文翻译