2

一、灰度图(单通道图、黑白图)

单通道图就是指维度数为2,或者第三维为1的的图,也称 灰度图,可以理解为 黑白图

图像的每个 像素点 只能有 一个值 表示颜色,像素值范围是 [0~255] 。以下两个图都是灰度图,只是灰度的等级不同,第一个图中每个像素点的值要么为0要么为255;第二张图每个像素点的值就是一个 [0~255] 区间。

二、彩色图(RGB图、三通道图)

彩色图每个 像素点 都有 3个值 表示颜色,所以称 3通道。例如 RGB图片 有三个通道,它就是彩色图。

如果某个位置上三个通道的值都相同,图片也会是黑白色的,看起来和灰度图一样,但它本质上区别于灰度图。

一般就叫做普通的三通道图。也就是说:三通道图可以是灰度图,但单通道图只能是灰度图。

例如下面的第一张图是彩色图,第二张图品就是普通的三通道图。
RGB图
黑白颜色的普通三通道图

三、判断图片是灰度图还是三通道黑白颜色的图

右击图片 属性,展开 详细信息,里面有 位深度 ,如下图:

如果是 三通道图,位深度是 24
如果是 单通道图(灰度图),位深度是 8

四、单通道图与三通道图相互转化

【单通道图】 转化为 【普通三通道图】

第一种方法:stacked_img = np.stack((gray_img,)*3, axis=-1)
第二种方法:img = cv2.cvtColor(img , cv2.COLOR_GRAY2RGB)

【单通道图】 转化为 【RGB图】

opencv、PIL都不支持,需要使用上色算法

【彩色图、三通道图】 转化为 【单通道图】

第一种方法(读取时就转化):img = cv2.imread('test.jpg', 0)  # 参数0等价于:cv2.IMREAD_GRAYSCALE。  如果不加0,会默认读取为三通道图像,即使原图像是灰度图。
第二种方法(读取后再转化):img = cv2.cvtColor(img , cv2.COLOR_RGB2GRAY)

PIL的方法(读取时就转化):  img = Image.open('test.jpg').convert('L')   # 参数为"1"时表示转化为二值化图(位深度为1,每个像素点的值为0或1)


Solryu
18 声望5 粉丝