OpenCV学习-P29-P32 Opencv直方图均衡化及掩膜
1 直方图
直方图原理:统计图像各个灰度区间的像素数




cv2.calcHist([img],[0],None,[256],[0,256])
[0]表示通道,[256]表示bin个数,[0,256]表示灰度值取值范围,参数需要加[]
img= cv2.imread(r'.\\20220822162647.jpg',0)
histr=cv2.calcHist([img],[0],None,[256],[0,256])
plt.figure(figsize=(10,6),dpi=100)
plt.plot(histr)
plt.show()
如果需要提取图像某部分直方图,可以给calcHist添加掩膜

img= cv2.imread(r'.\\20220822162647.jpg',0)
mask=np.zeros(img.shape[:2],np.uint8)
mask[200:250,100:300]=255
masked_img=cv2.bitwise_and(img,img,mask=mask)
histr=cv2.calcHist([img],[0],None,[6],[0,256])
fig,axes=plt.subplots(nrows=2,ncols=2,figsize=(10,8))
axes[0,0].imshow(img)
axes[0,0].set_title("原图")
axes[0,1].imshow(mask)
axes[0,1].set_title("蒙版数据")
axes[1,0].imshow(masked_img)
axes[1,0].set_title("掩膜后数据")
axes[1,1].plot(histr)
axes[1,1].set_title("灰度直方图")
axes[1,1].grid()
plt.rcParams['font.sans-serif']=['SimHei']
plt.show()
2 直方图均衡化
直方图均衡化可提高图像整体对比度,在曝光过度或不足的图像中可以更好的突出细节


3 直方图自适应均衡化
dst=cv.equalizeHist(img)
自适应直方图均衡化:全局直方图均衡化后,可能会丢失部分细节信息,如下图人脸原来是清晰的,均衡化后太亮就不清晰了,所以需要将图像分为很多小块(称为tiles,在opencv中默认为8*8),对每个小块进行直方图均衡化,



本文围绕OpenCV展开,介绍了直方图原理,即统计图像各灰度区间像素数,还说明了提取部分直方图可添加掩膜。同时阐述了直方图均衡化能提高图像整体对比度,突出细节,以及自适应直方图均衡化可避免全局均衡化丢失细节,将图像分块处理。
1460

被折叠的 条评论
为什么被折叠?



