利用Python自编的灰度化算法程序,目的是深入了解算法本身

需要导入的库

因为是自编的算法,所不打算用什么图像处理函数。

import numpy as np
import matplotlib.pyplot as plt

利用Matplotlib导入图片

img = plt.imread('../lena.png')
plt.imshow(img)
plt.axis('off')

平均值灰度化算法

#先获取图片的尺寸
#matplotlib获取的图片会变成numpy的数组,所以可以用shape来获取长度和维度
px = img.shape
gray_img = np.zeros((px[0],px[1]))
#使用循环来求取每一个像素灰度值的平均值,因为是彩色图像,所以是三维的。
for i in range(px[0]):
    for j in range(px[1]):
        gray_img[i][j] = (img[i][j][0]+img[i][j][1]+img[i][j][2])/3
plt.imshow(gray_img,cmap='gray')
plt.axis('off')
plt.show()

不过,这种直接从matlab移植出来的方法显然有些笨拙

所以我们不妨换一种实现的方式,优化一下算法

考虑numpy数组的特殊性,所以可以利用切片实现

gray_img2 = (img[:,:,0]+img[:,:,1]+img[:,:,2])/3
plt.imshow(gray_img2,cmap='gray')
plt.axis('off')
plt.show()

同样可以达到上面的效果,但代码更加轻便了。

这里只弄了平均值算法,利用同样的原理也可以实现最大值法和权值平均法,这两个方法在之前的博客中有用matlab实现过,因此在这里不再重新弄了。

文章目录