图像均衡化python实现

图像均衡化的主要目的是让原图的像素值均匀分布在整个图像中。

import cv2
import numpy as np
from matplotlib import pyplot as plt

'''
equalizeHist—直方图均衡化
函数原型: equalizeHist(src, dst=None)
src:图像矩阵(单通道图像)
dst:默认即可
'''


def equalizeHist(img):
    """直方图均衡化"""

    if img.shape == 1:  # 单通道图--》灰度图
        # 灰度图像直方图均衡化
        # 原始图像像素直方图
        plt.hist(img.ravel(), 256)
        plt.show()
        dst = cv2.equalizeHist(img)
        # 目标图像像素直方图
        plt.figure()
        plt.hist(dst.ravel(), 256)
        plt.show()

        cv2.imshow("Histogram Equalization", np.hstack([img, dst]))  # 拼接在一起输出
        cv2.waitKey(0)
    # 彩色图像直方图均衡化,3通道图
    else:
        (b, g, r) = cv2.split(img)
        # 显示原图直方图
        plt.hist(img.ravel(), 256)
        plt.show()
        # 彩色图像均衡化,需要分解通道 对每一个通道均衡化
        bH = cv2.equalizeHist(b)
        gH = cv2.equalizeHist(g)
        rH = cv2.equalizeHist(r)
        # 合并每一个通道
        result = cv2.merge((bH, gH, rH))
        # 均衡化之后的直方图
        plt.hist(result.ravel(), 256)
        plt.show()
        # 均衡化之后的图
        cv2.imshow("src_img and dst_img", np.hstack([img, result]))
        cv2.waitKey(0)


if __name__ == '__main__':
    img = cv2.imread("../data/lenna.png")
    equalizeHist(img)

均衡化之前的直方图:

均衡化之后的直方图:

图像均衡化结果:

 

 

 

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值