使用python opencv库读取一幅图像文件对其直方图均衡化算法的实现显示增强后的图像以及前后直方图对比。
以下是Python OpenCV库实现直方图均衡化的代码:
import cv2
import numpy as np
import matplotlib.pyplot as plt
# 读取图像
img = cv2.imread('lena.jpg', cv2.IMREAD_GRAYSCALE)
# 直方图均衡化
equ = cv2.equalizeHist(img)
# 显示增强后的图像
cv2.imshow('Equalized Image', equ)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 计算原图和增强后图像的直方图
hist, bins = np.histogram(img.flatten(), 256, [0, 256])
cdf = hist.cumsum()
cdf_normalized = cdf * hist.max() / cdf.max()
hist_equ, bins_equ = np.histogram(equ.flatten(), 256, [0, 256])
cdf_equ = hist_equ.cumsum()
cdf_equ_normalized = cdf_equ * hist_equ.max() / cdf_equ.max()
# 绘制前后直方图对比图
plt.subplot(2, 2, 1)
plt.imshow(img, cmap='gray')
plt.title('Original Image')
plt.xticks([])
plt.yticks([])
plt.subplot(2, 2, 2)
plt.plot(cdf_normalized, color='b')
plt.hist(img.flatten(), 256, [0, 256], color='r')
plt.xlim([0, 256])
plt.legend(('CDF', 'Histogram'), loc='upper left')
plt.subplot(2, 2, 3)
plt.imshow(equ, cmap='gray')
plt.title('Equalized Image')
plt.xticks([])
plt.yticks([])
plt.subplot(2, 2, 4)
plt.plot(cdf_equ_normalized, color='b')
plt.hist(equ.flatten(), 256, [0, 256], color='r')
plt.xlim([0, 256])
plt.legend(('CDF', 'Histogram'), loc='upper left')
plt.show()
其中,cv2.imread函数用于读取图像文件,cv2.equalizeHist函数用于进行直方图均衡化,cv2.imshow函数用于显示增强后的图像,np.histogram函数用于计算直方图,plt.subplot和plt.imshow函数用于绘制前后直方图对比图。
运行以上代码,即可得到增强后的图像以及前后直方图对比图。
原文地址: https://www.cveoy.top/t/topic/b1jo 著作权归作者所有。请勿转载和采集!