直方图均衡可以使图像中的物体和形状更为突出。
举个例子,某张轮船的原图如下:
现使用OpenCV提升对比度:
import cv2
import matplotlib.pyplot as plt
import numpy as np
ship = cv2.imread('ship.jpg',cv2.IMREAD_COLOR)[:,:,::-1]
plt.imshow(ship)
plt.show()
提升对比度前的输出图像结果:
# 提升对比度
ship_new = cv2.cvtColor(ship,cv2.COLOR_RGB2YUV) # 因为是彩色图像,需要先转换为YUV格式,再进行处理,处理后再转换为RGB格式
# 若是灰色图像,则可以直接应用
ship_new[:,:,0] = cv2.equalizeHist(ship_new[:,:,0]) # 对比度改变的是Y这个通道
ship_new = cv2.cvtColor(ship_new,cv2.COLOR_YUV2RGB)
plt.imshow(ship_new)
plt.show()
提升对比度后的输出图像结果:
提升前后的对比结果:
左侧为原图,右侧为提升后的结果。
如果是更为特殊的灰度图,那么操作就变得简单起来。
# 灰色图像直接应用equalizeHist
ship_gray = cv2.imread('ship.jpg',cv2.IMREAD_GRAYSCALE)
ship_gray.shape # 确认是否是灰度图
# 输出,确认是灰度图
(375, 500)
直接进行直方图均衡化:
ship_gray_new = cv2.equalizeHist(ship_gray)
plt.figure(figsize=(50,100))
plt.subplot(1,2,1)
plt.imshow(ship_gray)
plt.title('Before',size=90)
plt.axis('off')
plt.subplot(1,2,2)
plt.imshow(ship_gray_new)
plt.title('After',size=90)
plt.axis('off')
plt.tight_layout()
plt.show()
输出结果如下,左侧为原图,右侧为提升对比度后的结果。