导读:本文将着重介绍彩色图像的处理及彩色图像和灰度图像相互转换的相关内容。
作者:方圆圆
来源:大数据DT(ID:hzdashuju)
01 图像的颜色空间
彩色图像比灰度图像拥有更丰富的信息,它的每个像素通常是由红(R)、绿(G)、蓝(B)3个分量来表示的,每个分量介于0~255之间。
图像中呈现的不同的颜色都是由R、G、B这3种颜色混合而成的。在OpenCV里面,彩色图像拥有3个颜色通道,但是通道的顺序是可以变换的,RGB、BRG、BGR、GBR、GRB都有可能。
在读取一幅图像的时候,我们对于图像的颜色通道排布并不清楚,因此需要先把图像的颜色通道固定下来,这就需要调用OpenCV的cvtColor()函数。
cvtColor()函数的功能是对图像进行颜色空间变换,原型如下:
dst=cv2.cvtColor(src, code )
参数说明:
src:输入图像即要进行颜色空间变换的原图像,可以是Mat类。
code:转换的代码或标识,即在此确定将什么制式的图片转换成什么制式的图片,后面会详细讲述。
函数输出进行颜色空间变换后存储图像。
通过调用cvtColor()函数,还可以将一幅彩色图像转换成灰度图像,示例代码见程序3-5,代码运行效果如图3.9所示。
▲彩色图像1.jpg
程序3-5 彩色图像转灰度图像示例:
color2gray.py
# -*- coding: UTF-8 -*-
import numpy as np
import cv2
#定义main()函数
def main():
img = cv2.imread('1.jpg')
img2 = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)
#从彩色图像转化成灰度图像
cv2.imshow('img2.bmp ', img2)
cv2.waitKey(0)
if __name__ == '__main__':
main()
▲图3.9 color2gray.py程序运行结果
注意:cvtColor()函数还可以通过改变参数cv2.COLOR_RGB2BRG等改变图像颜色通道的排列顺序。另外也可以直接在读取图像函数imread时设置参数为0,直接将彩色图像读取为灰度图像,img = cv2.imread('1.jpg',0)。
02 彩色图像的通道分离和混合
灰度图像是单通道的,彩色图像拥有R、G、B三个颜色通道。因此在图像处理时,经常把颜色通道分离,单独处理一个通道的数组,然后再合并成一幅彩色图像。
在实际的代码编写中,只需要调用OpenCV中的split()和merge()函数就可以实现图像的通