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

直方图均衡化

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

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

82d7dce4e97a48f392099a709697a0f0.png

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

# -*- 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)

效果展示:

81fbda9e04504a6491e5eab4a9d65700.png

9aefcf3c0cfa42a094c4c18d2c9d04d7.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值