在OpenCV里实现全局直方图均衡化2

匿名 (未验证) 提交于 2019-12-02 23:57:01

上面是根据原理,使用自己编写的算法来实现全局直方图均衡化,接着下来,就是使用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

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!