Python opencv局部直方图均衡增强

        opencv直方图均衡包含两种,一种是对全图进行直方图均衡,另一种是对局部进行直方图均衡,也称为自适应直方图均衡。直方图均衡是让图像的像素分布更加均匀,一般可以使图片更亮、解决偏色问题、增加局部细节等。

1 全局直方图均衡

        全局直方图均衡的函数为cv2.equalizeHist(img)。示例代码如下:

import cv2

if __name__ == '__main__':
    image = cv2.imread('lena.jpg', 0)
    eh = cv2.equalizeHist(image)
    cv2.imshow('image', image)
    cv2.imshow('eh', eh)
    cv2.waitKey(0)

        效果如下图所示,可见处理后图片亮度和局部细节都有明显增加。

2 自适应直方图均衡

        自适应直方图均衡的函数为cv2.createCLAHE(clipLimit=8.0, titeGridSize=(8, 8)) ,clipLimit颜色对比度的阈值。tileGridSize进行像素均衡化的网格大小,即在多少网格下进行直方图的均衡化操作。

        通过实验对比,clipLimit越大表示局部细节对比度越明显。

        tileGridSize越大图片越亮,过大会导致细节丢失。

        示例代码如下:

import cv2

if __name__ == '__main__':
    image = cv2.imread('lena.jpg', 0)
    cla = cv2.createCLAHE(clipLimit=8.0, tileGridSize=(8, 8)).apply(image)
    print(cla.shape)
    cv2.imshow('image', image)
    cv2.imshow('cla', cla)
    cv2.waitKey(0)

        效果如下图所示,局部细节更加明显。

tileGridSize=8

 tileGridSize=80

局部直方图均衡化是一种用于增强图像局部对比度的方法,特别适用于具有不均匀光照条件的图像。在OpenCV中,可以使用以下步骤来实现局部直方图均衡化: 1. 将原始图像转换为灰度图像(如果原始图像不是灰度图像)。 2. 将图像分割成多个重叠的局部区域。 3. 对每个局部区域应用直方图均衡化。可以使用OpenCV的`equalizeHist`函数来实现直方图均衡化。 4. 将所有局部区域重新组合成最终的增强图像。 下面是一个使用OpenCV进行局部直方图均衡化的示例代码: ```python import cv2 def local_histogram_equalization(image, tile_size): # 将图像转换为灰度图像 gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 获取图像尺寸和通道数 height, width = gray.shape # 定义重叠的局部区域大小 overlap = 0.5 # 重叠比例 tile_height = int(tile_size[0] * (1 - overlap)) tile_width = int(tile_size[1] * (1 - overlap)) # 定义输出图像 output = np.zeros_like(gray, dtype=np.uint8) # 对每个局部区域应用直方图均衡化 for y in range(0, height, tile_height): for x in range(0, width, tile_width): # 获取局部区域 tile = gray[y:y+tile_height, x:x+tile_width] # 应用直方图均衡化 equalized_tile = cv2.equalizeHist(tile) # 将均衡化的局部区域放回输出图像中 output[y:y+tile_height, x:x+tile_width] = equalized_tile return output # 加载图像 image = cv2.imread('image.jpg') # 设置局部区域大小(例如:50x50) tile_size = (50, 50) # 进行局部直方图均衡化 enhanced_image = local_histogram_equalization(image, tile_size) # 显示原始图像和增强图像 cv2.imshow('Original Image', image) cv2.imshow('Enhanced Image', enhanced_image) cv2.waitKey(0) cv2.destroyAllWindows() ``` 在上面的示例代码中,我们首先定义了一个`local_histogram_equalization`函数来实现局部直方图均衡化。然后,我们加载图像并设置局部区域大小,最后调用函数进行局部直方图均衡化,并显示原始图像和增强图像。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Coding的叶子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值