环境:spyder(python 3.7 ) opencv-python (4.1.2.30)
opencv-python中有一个函数cv.equalizeHist(single_channel_img)可以非常方便的对图像进行直方图均衡化处理
直方图均衡化增加了图像的对比度,待会我们通过例子就可以看出图片明显的区别,这里需要注意的一点是, src参数必须是8比特的单通道图像,否者报错。
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
test=cv.imread("test.bmp",-1)
B,G,R = cv.split(test) #get single 8-bits channel
EB=cv.equalizeHist(B)
EG=cv.equalizeHist(G)
ER=cv.equalizeHist(R)
equal_test=cv.merge((EB,EG,ER)) #merge it back
cv.imshow("test",test)
cv.imshow("equal_test",equal_test)
hist_EB=cv.calcHist([EB],[0],None,[256],[0,256])
hist_EG=cv.calcHist([EG],[0],None,[256],[0,256])
hist_ER=cv.calcHist([ER],[0],None,[256],[0,256])
hist_b=cv.calcHist([B],[0],None,[256],[0,256])
plt.plot(hist_EB,'b');
plt.plot(hist_b,'r');
plt.show()
运行结果:
(由于网页原因,尺寸有拉伸)但是不影响观察到右边的图像对比度更高。代码的最后两行展示了均衡前和均衡后的Blue通道的像素分布。
(红色代表均衡前的,蓝色代表均衡之后的,是不是感觉蓝色均衡很多)
到这里系统自带的函数就已经展示完了。