定义
首先,前文提到,图片的存储是一个三位数组,并且有RGB三色通道,所以可以展现多种色彩,但对灰度图来说,它只有一种色调。所以它是一个二维数组
灰度图:单通道图,每个像素点只存一个像素值,图像整体表现为灰色,从0-255表现为从黑到白的过程。
三种方法
对图片进行灰度化也就是改变其三信道的信道值,使其整体呈就灰色
1.加权平均法
加权平均法:对于彩色图像的每个像素【每个像素包含 RGB三通道】,它会按照一定的权重去乘以每个通道的像素值,并将其相加,得到最后的值就是灰度图像中对应位置的像素值,权重的比例为: R乘以0.299,G乘以0.587,B乘以0.114。
2.平均值法:
平均值法:对于彩色图像的每个像素,它会将R、G、B三个通道的像素值全部加起来,然后再除以三,得到的平均值就是灰度图像中对应位置的像素值。
3.最大值法
最大值法:对于彩色图像的每个像素,它会从R、G、B三个通道的值中选出最大的一个,并将其作为灰度图像中对应位置的像素值。
代码
import numpy as np
import matplotlib.pyplot as pltimg = plt.imread("./flower.png")img_gray = np.zeros_like(img)#下面三种方法演示时三选一即可# 1.使用加权均值法进行灰度化
for i in range(img_gray.shape[0]):for j in range(img_gray.shape[1]):img_gray[i, j, :] = (img[i, j, 0]*0.299 + img[i, j, 1]*0.587 + img[i, j, 2]*0.114)# 2.使用平均值法进行灰度化
for i in range(img_gray.shape[0]):for j in range(img_gray.shape[1]):img_gray[i, j, :] = (img[i, j, 0] + img[i, j, 1] + img[i, j, 2]) / 3# 3.使用最大值法进行灰度化
for i in range(img_gray.shape[0]):for j in range(img_gray.shape[1]):img_gray[i, j, :] = max(img[i, j, 0] , img[i, j, 1] , img[i, j, 2])plt.subplot(121)
plt.imshow(img)plt.subplot(122)
plt.imshow(img_gray)plt.tight_layout()
plt.show()
无论何种方式,都是对三信道值做出综合处理,然后把相对灰度化的 信道值 赋值给 单信道。