opencv学习:图像直方图均衡化与对比度受限的自适应直方图均衡化及实验代码
直方图均衡化是一种图像处理技术,用于改善图像的全局对比度,通过均匀分布图像的灰度级来实现。CLAHE是一种改进的直方图均衡化技术,它将图像分割成多个小块,对每个小块分别进行直方图均衡化,然后合并结果,以避免在大范围均衡化中可能出现的噪声放大问题。
实验步骤
- 使用OpenCV读取图像文件“woman.png”为灰度图像。
phone=cv2.imread("woman.png",cv2.IMREAD_GRAYSCALE)
- 计算并显示原始图像的直方图。
plt.hist(phone.ravel(),bins=256) plt.show()
- 应用直方图均衡化,计算并显示均衡化后的图像的直方图。
phone_equalize=cv2.equalizeHist(phone) plt.hist(phone_equalize.ravel(),bins=256) plt.show()
- 将原始图像和均衡化后的图像水平堆叠,显示在同一个窗口中。
res=np.hstack((phone,phone_equalize)) cv2.imshow("phone_equalize",res)
- 创建CLAHE对象,设置clipLimit和tileGridSize参数。
clahe=cv2.createCLAHE(clipLimit=1,tileGridSize=(16,16))
- 应用CLAHE处理原始图像。
phone_clahe=clahe.apply(phone)
- 将原始图像、直方图均衡化后的图像和CLAHE处理后的图像水平堆叠,显示在同一个窗口中。
res=np.hstack((phone,phone_equalize,phone_clahe)) cv2.imshow("phone_equalize",res)
实验结果
完整代码
phone=cv2.imread("woman.png",cv2.IMREAD_GRAYSCALE)
plt.hist(phone.ravel(),bins=256)
plt.show()
phone_equalize=cv2.equalizeHist(phone)
plt.hist(phone_equalize.ravel(),bins=256)
plt.show()
res=np.hstack((phone,phone_equalize))
cv2.imshow("phone_equalize",res)
cv2.waitKey(0)
clahe=cv2.createCLAHE(clipLimit=1,tileGridSize=(16,16))
phone_clahe=clahe.apply(phone)
res=np.hstack((phone,phone_equalize,phone_clahe))
cv2.imshow("phone_equalize",res)
cv2.waitKey(0)
plt.show()