赞
踩
直方图原理:统计图像各个灰度区间的像素数
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()
直方图均衡化可提高图像整体对比度,在曝光过度或不足的图像中可以更好的突出细节
dst=cv.equalizeHist(img)
自适应直方图均衡化:全局直方图均衡化后,可能会丢失部分细节信息,如下图人脸原来是清晰的,均衡化后太亮就不清晰了,所以需要将图像分为很多小块(称为tiles,在opencv中默认为8*8),对每个小块进行直方图均衡化,
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。