# -*- coding:utf-8 -*-
import cv2
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
import sys
plt.rcParams['font.sans-serif'] = ['SimHei'] # 可以plt绘图过程中中文无法显示的问题
def zhi(path):
# 读取图像
image = cv.imread(path)
# 判断图片是否读取成功
if image is None:
print('Failed to read apple.jpg.')
sys.exit()
# 将图像转为灰度图像
gray_image = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
# 对图像进行直方图计算
hist_item = cv.calcHist([gray_image], [0], None, [256], [0, 256])
# 对直方图进行绝对值求和归一化
image_L1 = cv.normalize(hist_item, None, 1, 0, cv.NORM_L1)
# 对直方图进行最大值归一化
image_Inf = cv.normalize(hist_item, None, 1, 0, cv.NORM_INF)
# 展示结果
return image_L1,image_Inf
if __name__ == '__main__':
x = np.linspace(0, 255, 256, axis=-1)
x = x.reshape(256, 1)
path1='F:yufanhuaziliaodaimaerziimagIMAG\1_1.png'
image_L1, image_Inf=zhi(path1)
# plt.plot(image_L1, label='对直方图进行绝对值求和归一化',color='green')
# # plt.show()
plt.plot(image_Inf, label='亮度1',color='blue')
plt.fill(x, image_Inf, color='blue', alpha=0.5)
path1 = 'F:yufanhuaziliaodaimaerziimagIMAG\1_2.png'
image_L11, image_Inf1 = zhi(path1)
# plt.plot(image_L1, label='对直方图进行绝对值求和归一化',color='green')
# # plt.show()
plt.plot(image_Inf1, label='亮度2', color='green')
plt.fill(x, image_Inf1, color='green', alpha=0.5)
path1 = 'F:yufanhuaziliaodaimaerziimagIMAG\1_3.png'
image_L11, image_Inf1 = zhi(path1)
# plt.plot(image_L1, label='对直方图进行绝对值求和归一化',color='green')
# # plt.show()
plt.plot(image_Inf1, label='亮度3', color='orange')
plt.fill(x, image_Inf1, color='orange', alpha=0.5)
path1 = 'F:yufanhuaziliaodaimaerziimagIMAG\1_4.png'
image_L11, image_Inf1 = zhi(path1)
# plt.plot(image_L1, label='对直方图进行绝对值求和归一化',color='green')
# # plt.show()
plt.plot(image_Inf1, label='亮度4', color='Cyan')
plt.fill(x, image_Inf1, color='Cyan', alpha=0.5)
path1 = 'F:yufanhuaziliaodaimaerziimagIMAG\1_5.png'
image_L11, image_Inf1 = zhi(path1)
# plt.plot(image_L1, label='对直方图进行绝对值求和归一化',color='green')
# # plt.show()
plt.plot(image_Inf1, label='亮度5', color='red')
plt.fill(x, image_Inf1, color='red', alpha=0.4)
plt.legend()
plt.show()
cv2.waitKey(0)
cv2.destroyAllWindows()