- A+
1 色彩空间
1.1 RGB
红绿蓝 三色,也是大家熟悉光学三原色
RGB 使用加色模式,也就是默认是黑色,三原色相加获得白色
上图可以看到灰度图在正方体对角线上,即三个通道(轴)的值相等时,值越大越白
在图像处理中,最常用的颜色空间是RGB模型,常用于颜色显示和图像处理,三维坐标的模型形式,非常容易被理解。
1.2 HSV
Hue(色调、色相)Saturation(饱和度、色彩纯净度)Value(明度)
HSV模型,是针对用户观感的一种颜色模型,侧重于色彩表示,什么颜色、深浅如何、明暗如何。HSV在用于指定颜色分割时,有比较大的作用。
1.3 HIS
当人观察一个彩色物体时,用色调、饱和度、亮度来描述物体的颜色。其中H定义颜色的频率,称为色调;S表示颜色的深浅程度,称为饱和度;I表示强度或亮度。
模型优点
1.在处理彩色图像时,可仅对I分量进行处理,结果不改变原图像中的彩色种类;
2.HSI模型完全反映了人感知颜色的基本属性,与人感知颜色的结果一一对应,因此,HSI模型被广泛应用于人的视觉系统感知演的的图像表示和处理系统中。
1.4 YUV(也称YCrCb)
YUV(也称YCrCb)是被欧洲电视系统所采用的一种颜色编码方法(属于PAL制式)。YUV主要用于优化彩色视频信号的传输,使其向后兼容老式黑白电视。与RGB视频信号传输相比,它最大的优点在于只占用极少的带宽,而RGB要求三个独立的视频信号同时传输。YUV 主要是用在彩色电视中,用于模拟信号表示。YCbCr 用在数字视频、图像的压缩和传输,如 MPEG、JPEG。在YUV中,“Y”代表明亮度(Luminance或Luma),也就是灰阶值;而“U”和“V”表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。“亮度”是通过RGB输入信号来创建的,方法是将RGB信号的特定部分叠加到一起。“色度”则定义了颜色的两个方面——色调与饱和度,分别用Cr和Cb来表示。其中,Cr反映了RGB输入信号红色部分与RGB信号亮度值之间的差异,而Cb反映的是RGB输入信号蓝色部分与RGB信号亮度值之间的差异,此即所谓的色差信号,也就是我们常说的分量信号(Y、R-Y、B-Y)。
2 代码
- import cv2 as cv
- def color_space_demo(image):
- gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
- cv.imshow("gray", gray)
- hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV)
- cv.imshow("hsv", hsv)
- yuv = cv.cvtColor(image, cv.COLOR_BGR2YUV)
- cv.imshow("yuv", yuv)
- ycrcb = cv.cvtColor(image, cv.COLOR_BGR2YCrCb)
- cv.imshow("ycrcb", ycrcb)
- src = cv.imread("C:/Users/Admin/Desktop/1.jpg") # 读取图像
- cv.namedWindow("input image", cv.WINDOW_AUTOSIZE) # 创建显示图像的窗口
- cv.imshow("input image", src) # 显示图片到特定的窗口中
- color_space_demo(src)
- cv.waitKey(0) # 等待用户操作,0为一直等待,5000为等待用户操作5s
- cv.destroyAllWindows() # 释放所有内存
- print("hello world")
3 讲解
从读取1.jpg图像开始,显示原图到“input image”窗口中,调用color_space_demo函数,将原图数据当作参数传入,首先转换为灰度图并显示,再转换成HSV模型并显示;再转换成YUV模型并显示;再转换成YCrCb模型并显示。