cv基础组队学习
计算机视觉基础:图像处理(上)
Task03 彩色空间互转
1 简介
图像彩色空间互转在图像处理中应用非常广泛,而且很多算法只对灰度图有效;另外,相比RGB,其他颜色空间(比如HSV、HSI)更具可分离性和可操作性,所以很多图像算法需要将图像从RGB转为其他颜色空间,所以图像彩色互转是十分重要和关键的
2学习目标
- 了解相关颜色空间的基础知识
- 理解彩色空间互转的理论
- 掌握OpenCV框架下颜色空间互转API的使用
3内容介绍
1.相关颜色空间的原理介绍
2.颜色空间互转理论的介绍
3.OpenCV代码实践
4.动手实践
4算法理论介绍
4.1 RGB与灰度图互转
RGB颜色空间以R(Red:红)、G(Green:绿)、B(Blue:蓝)三种基本色为基础,进行不同程度的叠加,产生丰富而广泛的颜色,所以俗称三基色模式。电视机、电脑的显示器等大部分都是采用这种模型。自然界中的任何一种颜色都可以由红、绿、蓝三种色光混合而成,现实生活中人们见到的颜色大多是混合而成的色彩。
RGB颜色空间是用一个单位长度的立方体来表示颜色的,黑蓝绿青红紫黄白8种常见颜色分别位居立方体的8个顶点,通常将黑色置于三维直角坐标系的原点,红绿蓝分别置于3根坐标轴土,整个立方体放在第1卦限内。如下图所示。而其中的青色与红色、紫色与绿色、黄色与蓝色是互补色。各参数的取值范围是:R:0-255;G:0-255;B:0-255。参数值也称为三色系数或基色系数或颜色值,除以255后归一到0-1之间,但不是无穷多个而是有限多个值。由于每个灰度级都定为256,所以,红绿蓝分量全部组合起来共可表示256256256=16777216种不同的颜色。它比人眼能分辨的颜色种数多得多。因此,虽然自然界中的颜色非常多,但用RGB颜色空间来近似表达自然界中的颜色是完全够用了.
RGB使用红、绿、蓝三原色的亮度来定量表示颜色,能清楚知道三原色的比例,但是并不直观,很难想象看见这三原色的比例能直接知道色彩到底是什么样的。科学研究一般不采用RGB颜色空间,因为它的细节难以进行数字化的调整。它将色调,亮度,饱和度三个量放在一起表示,很难分开。
对于彩色图转灰度图,有一个很著名的心理学公式:
Gray = R * 0.299 + G * 0.587 + B * 0.114
原图:
转为灰度图:
img = cv2.imread('yuanjieshen1.jpg')
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow("hudutu", gray_img)
cv2.waitKey()
4.2 RGB与HSV互转
HSV是一种将RGB色彩空间中的点在倒圆锥体中的表示方法。HSV即色相(Hue)、饱和度(Saturation)、明度(Value),又称HSB(B即Brightness)。色相是色彩的基本属性,就是平常说的颜色的名称,如红色、黄色等。饱和度(S)是指色彩的纯度,越高色彩越纯,低则逐渐变灰,取0-100%的数值。明度(V),取0-max(计算机中HSV取值范围和存储的长度有关)。HSV颜色空间可以用一个圆锥空间模型来描述。圆锥的顶点处,V=0,H和S无定义,代表黑色。圆锥的顶面中心处V=max,S=0,H无定义,代表白色。
RGB颜色空间中,三种颜色分量的取值与所生成的颜色之间的联系并不直观。而HSV颜色空间,更类似于人类感觉颜色的方式,封装了关于颜色的信息:“这是什么颜色?深浅如何?明暗如何?
这个模型就是按色彩、深浅、明暗来描述的。
H是色彩;
S是深浅, S = 0时,只有灰度;
V是明暗,表示色彩的明亮程度,但与光强无直接联系。
应用:可以用于偏光矫正、去除阴影、图像分割等,下面贴出一张HSV颜色空间图:
效果图:
hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
cv2.imshow("hsv", hsv_img)
cv2.waitKey()
记录函数原型
void cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0)
src: 输入图像
dst: 输出图像
code: 颜色空间转换标识符
OpenCV2的CV_前缀宏命名规范被OpenCV3中的COLOR_式的宏命名前缀取代
注意RGB色彩空间默认通道顺序为BGR
具体可以参考: enum cv::ColorConversionCode部分
dstCn: 目标图像的通道数,该参数为0时,目标图像根据源图像的通道数和具体操作自动决定