直方图均衡化是图像处理领域中利用图像直方图对对比度进行调整的方法。
基本思想:把原始图的直方图变换为均匀分 布的形式,这样就增加了像素灰度值的动态 范围,从而达到增强图像整体对比度的效果。
直方图均衡化的三种情况,分别是:
灰度图像直方图均衡化
彩色图像直方图均衡化
YUV 直方图均衡化
插入原图:
原图
灰度图像直方图均衡化对直方图均衡化主要使用opencv提供的一个equalizeHist()方法。
import cv2 import numpy as np img = cv2.imread("linuxidc.com.jpg", 1) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) cv2.imshow("linuxidc", gray) dst = cv2.equalizeHist(gray) cv2.imshow("linuxidc.com", dst) cv2.waitKey(0)
将灰度图像作为参数传进equalizeHist()方法即可,效果如下:
彩色图像直方图均衡化彩色图像的直方图均衡化和灰度图像略有不同,需要将彩色图像先用split()方法,将三个通道拆分,然后分别进行均衡化.最后使用merge()方法将均衡化之后的三个通道进行合并.操作如下:
import cv2 import numpy as np img = cv2.imread("linuxidc.com.jpg", 1) cv2.imshow("www.linuxidc.com", img) # 彩色图像均衡化,需要分解通道 对每一个通道均衡化 (b, g, r) = cv2.split(img) bH = cv2.equalizeHist(b) gH = cv2.equalizeHist(g) rH = cv2.equalizeHist(r) # 合并每一个通道 result = cv2.merge((bH, gH, rH)) cv2.imshow("linuxidc.com", result) cv2.waitKey(0)
均衡化之后的效果如下:
YUV 直方图均衡化import cv2 import numpy as np img = cv2.imread("linuxidc.com.jpg", 1) imgYUV = cv2.cvtColor(img, cv2.COLOR_BGR2YCrCb) cv2.imshow("linuxidc.com", img) channelsYUV = cv2.split(imgYUV) channelsYUV[0] = cv2.equalizeHist(channelsYUV[0]) channels = cv2.merge(channelsYUV) result = cv2.cvtColor(channels, cv2.COLOR_YCrCb2BGR) cv2.imshow("www.linuxidc.com", result) cv2.waitKey(0)
均衡化之后效果如下: