直方图均衡python详细代码(非Opencv的内置函数equalizeHist()的源码)

# -*- coding:utf-8 -*-
# @auth hdy
# 直方图均衡
import cv2
import numpy as np
import matplotlib.pyplot as plt

img = cv2.imread("input.jpg")

def fun_hist(img):
    Hist = [] #创建列表--统计像素点
    h, w, c = img.shape #获取图片的高,宽,通道
    for i in range(c):
        Hist.append(img[:,:,i])#将3个颜色通道加入列表
    rect = (h * w) #总像素
    for k in range(c):
        index = 0#创建临时变量
        dict1 = {}#创建临时字典(3个通道)--直方图均衡后像素点的一一对应
        for i in range(256):
            #获取均衡后像素对应值,并储存到临时字典中
            index = len(Hist[k][Hist[k] <= i]) / rect
            dict1.update({"%d" % i:int(255 * index)})
        for x in range(h):
            for y in range(w):
                #根据图片像素值从字典中获取对应均衡后的像素值
                img[x,y,k] = dict1["%d" % int(img[x,y,k])]
    
    ######################################################
    # matlib统计画出图片的直方图
    # hist = cv2.calcHist([img], [0], None, [256], [0,256])
    # plt.plot(hist, "b")
    # hist = cv2.calcHist([img], [1], None, [256], [0,256])
    # plt.plot(hist, "g")
    # hist = cv2.calcHist([img], [2], None, [256], [0,256])
    # plt.plot(hist, "r")
    # plt.xlim([0,256])
    # plt.show()
    # #####################################################
    cv2.imshow("img", img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

fun_hist(img)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值