Python+OpenCV之直方图均衡化详解
更新时间:2022年09月29日 10:05:11 作者:锦鲤AI幸运
直方图均衡化是一种增强图像对比度的方法,其主要思想是将一副图像的直方图分布变成近似均匀分布,从而增强图像的对比度。本文将通过示例为大家讲讲直方图均衡化的原理与实现,感兴趣的可以了解一下
直方图均衡化
直方图均衡化(Histogram Equalization)是一种增强图像对比度(Image Contrast)的方法,其主要思想是将一副图像的直方图分布变成近似均匀分布,从而增强图像的对比度。
scenery.png原图(下载):

import cv2 # opencv读取的格式是BGR
import numpy as np
import matplotlib.pyplot as plt # Matplotlib是RGB
# %matplotlib inline
def cv_show(img, name):
cv2.imshow(name, img)
cv2.waitKey()
cv2.destroyAllWindows()
img = cv2.imread('DataPreprocessing/img/scenery.png', 0) # 0表示灰度图
hist = cv2.calcHist([img], [0], None, [256], [0, 256])
print(hist.shape)
plt.hist(img.ravel(), 256)
plt.show()
转为灰度图后,整张图片像素分布的直方图结果:

画出三通道的直方图分布:
color = ('b', 'g', 'r')
for i, col in enumerate(color):
histr = cv2.calcHist([img], [i], None, [256], [0, 256])
plt.plot(histr, color=col)
plt.xlim([0, 256])

直方图均衡化处理:
img = cv2.imread('DataPreprocessing/img/scenery.png', 0)
equ = cv2.equalizeHist(img)
plt.hist(equ.ravel(), 256)
plt.show()
# cv_show(equ, "equ")
经过直方图均衡化处理后的像素分布:

自适应直方图均衡化
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8))
res_clahe = clahe.apply(img)
res = np.hstack((img, equ, res_clahe))
cv2.imwrite("res_scenery.png", res)
cv_show(res, 'res')
展示所有的结果(原图 - - - 直方图均衡化 - - - 自适应直方图均衡化):

到此这篇关于Python+OpenCV之直方图均衡化详解的文章就介绍到这了,更多相关Python OpenCV直方图均衡化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Python使用文件锁实现进程间同步功能【基于fcntl模块】
这篇文章主要介绍了Python使用文件锁实现进程间同步功能,结合实例形式分析了Python基于fcntl模块文件锁功能实现进程间同步的相关操作技巧,需要的朋友可以参考下2017-10-10
详谈Python2.6和Python3.0中对除法操作的异同
下面小编就为大家带来一篇详谈Python2.6和Python3.0中对除法操作的异同。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧2017-04-04


最新评论