11 -- OpenCV学习—直方图均衡化

直方图均衡化

1.原理与应用

“直方图均衡化”是把原始图像的灰度直方图从比较集中的某个灰度区间变成在更广泛灰度范围内的分布。直方图均衡化就是对图像进行非线性拉伸,重新分配图像像素值,使一定灰度范围内的像素数量大致相同。这种方法提高图像整体的对比度,特别是有用数据的像素值分布比较接近时,在X光图像中使用广泛,可以提高骨架结构的显示,另外在曝光过度或不足的图像中可以更好的突出细节。

使用opencv:进行直方图统计时,使用的是:

API:

dst = cv.equalizeHist(img)

参数:

  • img:灰度图像

返回:

  • dst:均衡化后的结果

示例:

import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt

# 解决中文显示问题
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 1.直接以灰度图的方式读入
img = cv.imread('./images/e.jpg', 0)
# 2.均衡化处理
dst = cv.equalizeHist(img)
# 3.结果展示
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(10, 8), dpi=100)
axes[0, 1].imshow(img, cmap=plt.cm.gray)
axes[0, 1].set_title("原图")
axes[1, 1].imshow(dst, cmap=plt.cm.gray)
axes[1, 1].set_title("均衡化图")
plt.show()

结果如下:
11 -- OpenCV学习—直方图均衡化_第1张图片

2.自适应的直方图均衡化

API:

cv.crateCLAHE(clipLimit,tileGridSize)

参数:

  • clipLimit:对比度限制,默认是40。
  • tileGridSize:分块的大小,默认为8*8

示例:

import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt

# 解决中文显示问题
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 1.直接以灰度图的方式读入
img = cv.imread('./images/e.jpg', 0)

# 2.创建一个自适应均衡化的对象,并应用于图像
clahe = cv.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8))
cl1 = clahe.apply(img)
# 3,图像展示
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(10, 8), dpi=100)
axes[0].imshow(img, cmap=plt.cm.gray)
axes[0].set_title("原图")
axes[1].imshow(cl1, cmap=plt.cm.gray)
axes[1].set_title("自适应均衡化后的结果“")
plt.show()

结果如下:
11 -- OpenCV学习—直方图均衡化_第2张图片

你可能感兴趣的:(OpenCV学习笔记,opencv,计算机视觉,python)