上面是根据原理,使用自己编写的算法来实现全局直方图均衡化,接着下来,就是使用OpenCV里的函数cv2. equalizeHist()来计算,这个函数计算步骤如下:
采用这个函数来计算相同的图片的例子:
#python 3.7.4,opencv4.1 #蔡军生 https://blog.csdn.net/caimouse/article/details/51749579 # import cv2 import numpy as np import matplotlib.pyplot as plt import math #python 3.7.4,opencv4.1 #蔡军生 https://blog.csdn.net/caimouse/article/details/51749579 # import cv2 import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签 plt.rcParams['axes.unicode_minus']=False #用来正常显示负号 #图片的路径 imgname = "imgblack.jpg" #读取图片 image = cv2.imread(imgname, cv2.IMREAD_GRAYSCALE) #图片的高度和宽度 h,w = image.shape[:2] print('imagesize={}-{}'.format(w,h)) #显示原图 cv2.imshow("Image",image) #全局直方图均衡化处理 equalHist = cv2.equalizeHist(image) cv2.imshow("equalHist", equalHist) #显示直方图 pixel = equalHist.flatten()#把二维数组转换为一维数组 grayHist, bins, patch = plt.hist(pixel, 256,facecolor='black',histtype='bar') plt.xlabel('灰度值') plt.ylabel('像素个数') plt.axis([0,255, 0, np.max(grayHist)])#设置坐标轴范围 plt.show() cv2.waitKey(0) cv2.destroyAllWindows()
结果输出如下:
左图是原图,右图是全局直方图均衡化处理后的图
处理后的直方图
可以看到使用OpenCV函数更加简单,不过上面自己实现算法可以深入理解算法的实现,当然也可以根据自己的改进算法进行优化。
https://blog.csdn.net/caimouse/article/details/51749579
来源:51CTO
作者:caimouse
链接:https://blog.csdn.net/caimouse/article/details/100584257