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(这里保留三位小数)。

 

  

 

posted @ 2020-01-20 12:27  天子骄龙  阅读(5143)  评论(0编辑  收藏  举报