python--opencv-图像色彩转换
灰度是指把白色与黑色之间按对数关系分为若干个等级,一般我们将灰度分为256阶(0-255)。用灰度表示的图像就叫做灰度图。
一幅完整的图像是由红色、绿色、蓝色三个通道组成的,颜色通道一般有RGB和bgr两种,其中OpenCV中采用的颜色通道模式为bgr模式。
事实上,b(蓝色)、g(绿色)、r(红色)三个通道的缩览图都是以灰度显示的,当我们用不同的灰度色阶来表示b、g、r三个通道在图像中的比重,并将它们组合在一起时,就形成了一幅完整的图像。
通道中的纯白,代表了该色光在此处为最高亮度,亮度级别为255。同理,通道中的纯黑为最低亮度,亮度级别为0
图像的灰度处理就是对图像进行灰度化的过程,简单来说,就是将图像颜色从三通道变为单通道。在bgr模型中,如果b=g=r,那么表示的就是一种灰度颜色,其中b=g=r的值叫做灰度值(或叫做强度值、亮度值)。因此,灰度图像中的每个像素只需要一个字节来存放灰度值,其中灰度范围为0-255。
关于图像的灰度处理,其实我们在之前的章节中已经有用到过了。我们在读取图像数据时使用imread(filename,flags=None)函数,该函数接收两个参数,第一个参数为图像名称,第二个参数为图像读取方式。当flags传入1时,读取的为原图像,即具有三个颜色通道的彩色图;而当lags传入的是0时,读取的便是原图像的灰度图。
import cv2 #导入opencv库 import numpy as np img = cv2.imread("3.jpg",1) #读取一张图片,彩色 dst=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #颜色空间转换 ''' opencv中有多种色彩空间,包括 RGB、HSI、HSL、HSV、HSB、YCrCb、CIE XYZ、CIE Lab8种,使用中经常要遇到色彩空间的转化,以便生成mask图等操作 参数1 必选参数,待转换的原图像数据 参数2 必选参数。用于设置转换的代码或标识,确定从何种图像格式转换为另一种图像格式 cv2.COLOR_BGR2RGB 将BGR格式转换成RGB格式 cv2.COLOR_BGR2GRAY 将BGR格式转换成灰度图片 cv2.COLOR_BGR2HSV 从RGB转到HSV夜色空间 看下表 参数3 可选参数。表示输出图像,即转换后的目标图像数据。默认大小与形状同原图像保持一致 参数4 可选参数。用于设置目标图像通道数,默认取值为0,表示由参数1和参数2决定。 ''' print(dst.shape) cv2.imshow('img',img) cv2.imshow('dst',dst) cv2.waitKey() #窗口等待任意键盘按键输入,0为一直等待,其他数字为毫秒数
参数2 代码:
效果图:
图像灰度处理方法:
图像灰度化就是将bgr模式的三通道颜色转换为b=g=r的单通道颜色。因此,图像的灰度化其实就是求取b=g=r=x中的x值。常用的方法有分量法、最大值法、平均值法和加权平均法四种方法对彩色图像进行灰度化
分量法:
分量法指的是将彩色图像中的b(蓝色)、g(绿色)、r(红色)三分量的亮度作为三个灰度图像的灰度值,分别产生蓝色分量灰度图、绿色分量灰度图和红色分量灰度图,然后根据应用需求选取其中一种分量灰度图作为灰度图像
最大值法:
最大值法顾名思义就是将彩色图像中的b(蓝色)、g(绿色)、r(红色)三分量中的最大值作为灰度图的灰度值,即将灰度图的灰度设置为max(b,g,r)
平均值法:
平均值法与最大值法类似,取的是b(蓝色)、g(绿色)、r(红色)三分量的平均值,即将灰度图的灰度设置为(b+g+r)/3
加权平均法:
加权平均法是图像灰度处理用的比较多的一种实现方法,也是OpenCV默认的灰度处理方法。加权平均法会根据重要性及其它相关指标,将三个分量以不同的权值进行加权平均。由于人眼对绿色的敏感度最高,对蓝色的敏感度最低,因此,按下式对RGB三分量进行加权平均能得到较合理的灰度图像:
r*0.299+g*0.587+b*0.114(这里保留三位小数)。