cv2小记——直方图均衡化
发布日期:2021-06-30 15:01:45 浏览次数:2 分类:技术文章

本文共 1287 字,大约阅读时间需要 4 分钟。

# coding: utf-8 # !/usr/bin/python"""@File       :   直方图均衡化.py@Author     :   jiaming@Modify Time:   2020/2/6 15:24    @Contact    :   https://blog.csdn.net/weixin_39541632@Version    :   1.0@Desciption :   直方图均衡化                将山峰灰度图转化为平原灰度图"""import osimport sysimport numpy as npimport cv2import pprintfrom matplotlib import pyplot as pltrawPath = os.path.abspath(__file__)currentFile = os.path.basename(sys.argv[0])dataPath = rawPath[:rawPath.find(currentFile)] + r'static\\'

在这里插入图片描述

img = cv2.imread(dataPath+'big_deep.png', 0)hist, bins = np.histogram(img.flatten(), 256, [0, 256])cdf = hist.cumsum()cdf_normalized = cdf * hist.max() / cdf.max()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.show()

在这里插入图片描述

可以看出直方图大部分在灰度值较高的部分,而且分布很集中,而我们希望直方图分布比较分散,能够涵盖整个x轴。所以我们就需要一个变换函数帮助我们把现在的直方图映射到一个广泛分布的直方图中。这就是直方图均衡化的要做的事情。

img = cv2.imread(dataPath+'big_deep.png', 1)# 彩色图像均衡化,需要分解通道 对每一个通道均衡化(b, g, r) = cv2.split(img)bH = cv2.equalizeHist(b)gH = cv2.equalizeHist(g)rH = cv2.equalizeHist(r)# 合并每一个通道result = cv2.merge((bH, gH, rH))cv2.imshow("dst", result)cv2.waitKey(0)

在这里插入图片描述

即使我们传入的是一个比较暗的图片,在经过直方图均衡化后y也能得到相同的结果,因此,直方图均衡化经常用来使所有的图片具有相同的亮度条件的参考工具。
常用于脸部识别,在训练分类器前,训练集的所有工具都先要经过直方图均衡化从而使它们达到相同的亮度条件。

转载地址:https://jiaming.blog.csdn.net/article/details/104197423 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Linux常用命令——压缩和解压命令
下一篇:cv2小记——直方图的计算,绘制与分析

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月10日 09时52分06秒