opencv-python对彩色图像进行直方图均衡化

环境:spyder(python 3.7 ) opencv-python (4.1.2.30)

opencv-python中有一个函数cv.equalizeHist(single_channel_img)可以非常方便的对图像进行直方图均衡化处理

opencv-python对彩色图像进行直方图均衡化_第1张图片
直方图均衡化增加了图像的对比度,待会我们通过例子就可以看出图片明显的区别,这里需要注意的一点是, 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通道的像素分布。

opencv-python对彩色图像进行直方图均衡化_第2张图片
(红色代表均衡前的,蓝色代表均衡之后的,是不是感觉蓝色均衡很多)

到这里系统自带的函数就已经展示完了。

你可能感兴趣的:(计算机视觉,opencv)