OpenCV-直方图定义、直方图均衡化原理、均衡化效果、自适应直方图均衡化

概念

在这里插入图片描述
在这里插入图片描述

选取像素点、统计个数

在这里插入图片描述
(256,1)
256:0-255
1:每个值里面:0出现多少个,1多少个,255多少个

在这里插入图片描述

import cv2
img = cv2.imread('girl.png',0)#0表示灰度图
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
hist = cv2.calcHist([img],[0],None,[256],[0,256])
hist.shape
import matplotlib.pyplot as plt
plt.hist(img.ravel(),256)
plt.show()

在这里插入图片描述

img = cv2.imread('girl.png')
color = ('b','g','r')
for i,col in enumerate(color):
    histr =  cv2.calcHist([img],[i],None,[256],[0,256])
    plt.plot(histr,color = col)
    plt.xlim([0,256])

在这里插入图片描述
在这里插入图片描述

创建mask

#创建mask
import numpy as np
mask = np.zeros(img.shape[:2],np.uint8)
print(mask.shape)
mask[50:300,50:300] = 255
cv_show(mask,'mask')

在这里插入图片描述

img = cv2.imread('girl.png',0)#灰度图
cv_show(img,'img')
masked_img = cv2.bitwise_and(img,img,mask=mask)#与操作
cv_show(masked_img,'masked_img')

在这里插入图片描述

hist_full = cv2.calcHist([img],[0],None,[256],[0,256])
hist_mask = cv2.calcHist([img],[0],mask,[256],[0,256])#带掩码
plt.subplot(221),plt.imshow(img,'gray')
plt.subplot(222),plt.imshow(mask,'gray')
plt.subplot(223),plt.imshow(masked_img,'gray')
plt.subplot(224),plt.plot(hist_full),plt.plot(hist_mask)
plt.xlim([0,256])
plt.show()

在这里插入图片描述
直方图说白了就是统计每个像素点有多少个

直方图均衡化

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

img = cv2.imread('girl.png',0)#取灰度图  #clahe
plt.hist(img.ravel(),256)
plt.show()

在这里插入图片描述

equ = cv2.equalizeHist(img)
plt.hist(equ.ravel(),256)
plt.show()

在这里插入图片描述

res = np.hstack((img,equ))
cv_show(res,'res')

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
因此可以做自适应均衡化

自适应直方图均衡化

通过小格子自己做自己的,然后化为整体。但是这样子做完之后,每个小个子的边界会很明显,但是opencv自己会优化

clahe = cv2.createCLAHE(clipLimit = 2.0,tileGridSize = (8,8))
res_clahe = clahe.apply(img)
res = np.hstack((img,equ,res_clahe))
cv_show(res,'res')

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
对于图像处理中的直方图均衡操作,传统的方法是对整幅图像进行全局的直方图均衡,但是该方法存在一些缺陷,例如处理后的图像可能会出现过度增强的现象,同时在一些区域中会出现过度降低的现象。为了解决这些问题,可以使用自适应直方图均衡(AHE)来处理图像。 AHE算法的基本思想是将整幅图像分成若干个小区域,然后对每个小区域进行直方图均衡。这样做的主要好处是可以避免全局的过度增强和降低现象,同时能够更好地保留图像的细节和纹理信息。 下面是使用OpenCV实现自适应直方图均衡的代码: ```python import cv2 # 读取图像 img = cv2.imread('img.png', cv2.IMREAD_GRAYSCALE) # 定义区域大小和对比度 tile_size = 32 clip_limit = 3.0 # 创建CLAHE对象 clahe = cv2.createCLAHE(clipLimit=clip_limit, tileGridSize=(tile_size, tile_size)) # 对图像进行自适应直方图均衡 img_clahe = clahe.apply(img) # 显示原始图像和处理后的图像 cv2.imshow('Original Image', img) cv2.imshow('CLAHE Image', img_clahe) cv2.waitKey(0) cv2.destroyAllWindows() ``` 在上述代码中,首先读取了需要处理的图像,然后定义了区域大小和对比度参数。接着使用`cv2.createCLAHE()`函数创建CLAHE对象,并传入上述参数。最后调用`clahe.apply()`函数对图像进行自适应直方图均衡,得到处理后的图像。最后使用`cv2.imshow()`函数显示原始图像和处理后的图像。 需要注意的是,自适应直方图均衡效果取决于区域大小和对比度参数的选择,需要根据实际情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值