📜  OpenCV-直方图均衡化(1)

📅  最后修改于: 2023-12-03 15:33:17.982000             🧑  作者: Mango

OpenCV-直方图均衡化

OpenCV是一款面向计算机视觉编程的开源库,其中包含了丰富的图像处理、分析等模块,其中直方图均衡化是常用图像增强方法之一。

直方图均衡化的原理

直方图均衡化是通过对图像像素值进行重新分配,从而增强图像对比度和亮度。其具体实现原理如下:

  1. 将图像转换为灰度图像;
  2. 统计灰度图像中每个像素值的数量,得到原始直方图;
  3. 计算原始直方图的累计分布函数(cdf);
  4. 对灰度图像像素值进行重新分配,并更新图像;
  5. 计算更新后图像的直方图,确保均衡化效果。
OpenCV实现直方图均衡化

OpenCV中提供了直方图均衡化的API,其函数原型如下:

void equalizeHist(InputArray src, OutputArray dst);

其中,InputArray类型的参数src表示输入图像,OutputArray类型的参数dst表示输出图像。下面是代码示例:

import cv2
import matplotlib.pyplot as plt

img = cv2.imread('input_image.jpg', 0)

# 直方图均衡化
equ = cv2.equalizeHist(img)

# 显示原始图像和均衡化后的图像
plt.subplot(121)
plt.imshow(img, cmap='gray')
plt.title('Original Image')
plt.xticks([]), plt.yticks([])
plt.subplot(122)
plt.imshow(equ, cmap='gray')
plt.title('Equalized Image')
plt.xticks([]), plt.yticks([])
plt.show()

代码解释:

  1. 使用cv2.imread()函数读取图像;
  2. 使用cv2.equalizeHist()函数对灰度图像进行直方图均衡化;
  3. 使用matplotlib库绘制原始图像和均衡化后的图像。
效果示意图

原始图像:

原始图像

均衡化后的图像:

均衡化后的图像

可以看出,直方图均衡化可以有效地提高图像的对比度和亮度,使图像更具有清晰度和明亮度。