问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

OpenCV实现灰度图像直方图均衡化算法

创作时间:
作者:
@小白创作中心

OpenCV实现灰度图像直方图均衡化算法

引用
CSDN
1.
https://blog.csdn.net/missyougoon/article/details/81775251

直方图均衡化是一种常用的图像增强技术,主要用于改善图像的对比度。通过重新分配图像的灰度级,使得图像的灰度分布更加均匀,从而增强图像的视觉效果。本文将详细介绍如何使用OpenCV实现灰度图像的直方图均衡化算法。

灰度图像直方图均衡化的实现主要包含以下步骤:

  1. 计算每一个灰度级的概率
  2. 计算每一个灰度级的累计概率
  3. 计算映射表
  4. 将图像像素值通过映射表进行映射

对于直方图均衡化的原理,可以参考相关博文:直方图均衡化原理

下面是具体的代码实现:

import cv2
import numpy as np

# 读取图像
img = cv2.imread('image0.jpg', 1)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]

# 转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow('src', gray)

# 初始化计数数组
count = np.zeros(256, np.float) # 因为是概率, 有可能是浮点数

# 统计像素个数并计算概率
for i in range(height):
    for j in range(width):
        pixel = gray[i, j]
        index = int(pixel)
        count[index] = count[index] + 1

total = height * width # 总像素个数
count =  count / total  # 计算概率

# 计算累计概率
sum = float(0)
for i in range(256):
    sum += count[i]
    count[i] = sum # 计算出累积概率

# 计算映射表
mapl = np.uint16(255 * count)

# 将图像进行映射
for i in range(height):
    for j in range(width):
        pixel = gray[i, j]
        gray[i, j] = mapl[pixel]

cv2.imshow('dst', gray)
cv2.waitKey(0)

原图如下:

灰度图像直方图均衡化后效果如下:

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号