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