OpenCV如何利用python实现图像的直方图均衡化?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

1.直方图
直方图: (1) 图像中不同像素等级出现的次数 (2) 图像中具有不同等级的像素关于总像素数目的比值。
我们使用cv2.calcHist方法得到直方图
cv2.calcHist(images, channels, mask, histSize, ranges):
-img: 图像
-channels: 选取图像的哪个通道
-histSize: 直方图大小
-ranges: 直方图范围
cv2.minMaxLoc: 返回直方图的大最小值,以及他们的索引
import cv2
import numpy as np
def ImageHist(image, type):
color = (255, 255,255)
windowName = 'Gray'
if type == 1: #判断通道颜色类型 B-G-R
color = (255, 0, 0)
windowName = 'B hist'
elif type == 2:
color = (0,255,0)
windowName = 'G hist'
else:
color = (0,0,255)
# 得到直方图
hist = cv2.calcHist([image],[0],None,[256],[0,255])
# 得到大值和最小值
minV,maxV,minL,maxL = cv2.minMaxLoc(hist)
histImg = np.zeros([256,256,3],np.uint8)
#直方图归一化
for h in range(256):
interNormal = int(hist[h] / maxV * 256)
cv2.line(histImg, (h, 256), (h, 256 - interNormal), color)
cv2.imshow(windowName, histImg)
return histImg
img = cv2.imread('img.jpg', 1)
channels = cv2.split(img) # R-G-B
for i in range(3):
ImageHist(channels[i], 1 + i)
cv2.waitKey(0)