OpenCV中使⽤cv2.equalizeHist()和
⼀、函数介绍
1、cv2.equalizeHist(img)
参数:img表⽰输⼊的图⽚
作⽤:表⽰进⾏直⽅图均衡化
2、ateCLAHA(clipLimit=8.0, titleGridSize=(8, 8))
小米手机解锁
参数:clipLimit颜⾊对⽐度的阈值
titleGridSize进⾏像素均衡化的⽹格⼤⼩,即在多少⽹格下进⾏直⽅图的均衡化操作
作⽤: ⽤于⽣成⾃适应均衡化图像
3、直⽅图均衡化:
开发部
荒岛求生日记⼀般可以⽤来提升图⽚的亮度, 在上⾯⼀节中,我们可以看出在150-200之间所占的频数特别的⼤,频数均衡化指的是让频数的分布看起来更加均匀⼀些
上图中的左边的图是原始数据, 右边的图是进⾏函数映射后的灰度值
⾸先对各个灰度值做频数统计,计算其概率,根据像素的灰度值计算出累积概率,最后将累积概率 * (255-0) 做为函数映射后的灰度值,
这样做的⽬的,可以使得灰度值之间的间隔更⼩,即⼀些频数较⼤的灰度值补充给了频数较⼩的灰度值,从⽽实现了灰度值的均衡化2、案例:
"""
工作联系函第⼀步:读⼊图⽚
第⼆步:使⽤cv2.equalizeHist(img)均衡化像素
第三步:使⽤plt.hist 画出均衡化的直⽅图
第四步:使⽤plt.imshow 画出均衡化后的图像我从雪山来
这种全局的均衡化也会存在⼀些问题,由于整体亮度的提升,也会使得局部图像的细节变得模糊,因为我们需要进⾏分块的局部均衡化操作"""
熟睡的姐姐
import cv2
import numpy as np
import matplotlib.pyplot as plt
# 第⼀步:读⼊图⽚
img = cv2.imread('cat.jpg', 0)
# 第⼆步: 使⽤cv2.equalizeHist实现像素点的均衡化
ret = cv2.equalizeHist(img)
# 第三步:使⽤plt.hist绘制像素直⽅图
plt.subplot(121)
plt.hist(img.ravel(), 256)
plt.subplot(122)
plt.hist(ret.ravel(), 256)
plt.show()
征文通知
# 第四步:使⽤cv2.imshow()绘值均衡化的图像
cv2.imshow('ret', np.hstack((img, ret)))
cv2.waitKey(0)
"""
第⼀步:使⽤ateCLAHE(clipLimit=2.0, titleGridSize=(8, 8)) 实例化均衡直⽅图函数
第⼆步:使⽤.apply进⾏均衡化操作
第三步:进⾏画图操作
可以看出⾃适应均衡化没有使得⼈物脸部的细节消失
"""
# 使⽤⾃适应直⽅图均衡化
# 第⼀步:实例化⾃适应直⽅图均衡化函数
clahe = ateCLAHE(clipLimit=2.0,
tileGridSize=(8, 8))
# 第⼆步:进⾏⾃适应直⽅图均衡化
clahe = clahe.apply(img)
# 第三步:进⾏图像的展⽰
cv2.imshow('imgs', np.hstack((img, ret, clahe)))
珠宝广告
cv2.waitKey(0)
cv2.destroyAllWindows()