Python+OpenCV之直方图均衡化详解

1. 直方图均衡化介绍

直方图均衡化是一种用于增强图像对比度的图像处理技术。它通过重新分配图像像素的灰度级来扩展图像的动态范围,使图像的灰度级分布更均匀,从而改善图像的亮度和对比度。

1.1 直方图的概念

直方图是一种统计图表,用于表示图像中每个灰度级的像素数量。横轴表示灰度级,纵轴表示该灰度级的像素数量。直方图可以显示图像的整体亮度分布,了解图像的亮度范围和对比度。

1.2 直方图均衡化的原理

直方图均衡化的原理是通过将图像的像素值映射到新的灰度级上,使得图像的直方图呈均匀分布。具体步骤如下:

计算图像的灰度直方图。

计算累积分布函数(CDF)。

将CDF映射到新的灰度级,得到均衡化后的像素值。

根据新的像素值更新图像的像素。

2. 使用OpenCV进行直方图均衡化

OpenCV是一个强大的开源计算机视觉库,提供了丰富的图像处理函数。可以使用OpenCV来实现直方图均衡化。

2.1 导入库和读取图像

import cv2

import numpy as np

# 读取图像

image = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)

2.2 计算直方图

# 计算直方图

hist = cv2.calcHist([image], [0], None, [256], [0, 256])

2.3 计算累积分布函数(CDF)

# 计算累积分布函数(CDF)

cdf = hist.cumsum() / hist.sum()

2.4 映射到新的灰度级

# 映射到新的灰度级

new_image = np.interp(image.flatten(), np.arange(256), cdf * 255).reshape(image.shape).astype(np.uint8)

2.5 更新图像的像素值

# 更新图像的像素值

image_eq = cv2.equalizeHist(image)

3. 示例与对比

下面通过一个示例来比较直方图均衡化前后的效果。

3.1 原图像

3.2 直方图均衡化的效果

4. 总结

通过OpenCV进行直方图均衡化可以有效地增强图像的对比度,改善图像的亮度和清晰度。直方图均衡化是一种常用的图像处理技术,适用于许多应用领域,如计算机视觉、数字图像处理等。

后端开发标签