灰度图像和彩色图像直方图均衡化

直方图均衡化

        直方图均衡化是将原图像的直方图通过变换函数变为均匀的直方图,然后按均匀直方图修改原图像,从而获得一幅灰度分布均匀的新图像。直方图均衡化就是用一定的算法使直方图大致平 和的方法

直方图均衡化的作用是图像增强(大概实现效果如下,实际上不会这么平整)

 代码展示(包含不同方式展示直方图):

# -*- coding:utf-8 -*-
"""
@author: 绯雨千叶

equalizeHist—直方图均衡化
函数原型: equalizeHist(src, dst=None)
src:图像矩阵(单通道图像)
dst:默认即可
"""
import cv2
import numpy as np
from matplotlib import pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False

plt.figure()
img = cv2.imread("../img/lrn.jpg")
img1 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 获取灰度图像
img2 = cv2.equalizeHist(img1)  # 灰度图像直方图均衡化

plt.subplot(221)  # 灰度图像均衡化后的直方图,方法一
plt.title("方法一均衡化")
hist = cv2.calcHist([img2], [0], None, [256], [0, 256])  # 计算直方图
plt.plot(hist)

plt.subplot(222)  # 灰度图像均衡化后的直方图,方法二
plt.title("方法二均衡化")
plt.hist(img2.ravel(), 256)

plt.subplot(223)  # 灰度图像原图
plt.title("方法一原图")
hist = cv2.calcHist([img1], [0], None, [256], [0, 256])  # 计算直方图
plt.plot(hist)

plt.subplot(224)
plt.title("方法二原图")
plt.hist(img1.ravel(), 256)

cv2.imshow("Gray histogram equalization", np.hstack([img1, img2]))  # np.hstack将参数元组的元素数组按水平方向进行叠加

# 彩色图像均衡化,需要分解通道
(b, g, r) = cv2.split(img)  # 分离出图片的B,R,G颜色通道
bH = cv2.equalizeHist(b)  # 对每一个通道均衡化
gH = cv2.equalizeHist(g)
rH = cv2.equalizeHist(r)
# 合并每一个通道
img3 = cv2.merge((bH, gH, rH))
cv2.imshow("Color histogram equalization", np.hstack([img,img3]))
plt.show()
cv2.waitKey(0)

效果展示:

猜你喜欢

转载自blog.csdn.net/qq_58664081/article/details/129119405