目录
一、直方图
1.1直方图定义
用来表征该图像像素值得分布情况。用一定的小区间来指定表征像素值的范围,每个小区间会得到落入该小区间表示范围的像素数目。因此直方图不能显示图像中某像素所在的空间位置信息。
1.2代码实现
绘制直方图:使用Matplotlib自带的绘制工具plt.hist()绘制,hist(img,flatten(),128)。
hist()只接受一维数组作为输入,所以在绘制图像直方图之前,必须先对图像进行压平处理。flatten()方法将任意数组按照行优先准则转换成一维数组。第二个参数指定小区间的数目。
# 利用PIL库读取图像
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.cm
import cv2
img = Image.open('H:\zhifangtu/123.jpg')
# 将图像转成灰度图并读取到数组中
img1 = np.array(img.convert('L')) # 8位像素,黑白
# 使用matplotlib的库绘制图片进行显示
# 使其标题可以显示中文
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.figure() # 新建一个图像
plt.subplot(1, 3, 1)
plt.imshow(img)
plt.title('原图')
plt.subplot(1, 3, 2)
plt.imshow(img1,cmap=matplotlib.cm.Greys_r)
plt.title('灰度图')
plt.axis('off') # 不显示坐标轴
# 图像直方图
plt.subplot(1, 3, 3)
plt.hist(img1.flatten(), 128)
plt.title('直方图')
plt.xlim([0, 300])
plt.ylim([0, 12000])
plt.show()