代码语言:javascript复制
import cv2
import matplotlib.pyplot as plt
o=cv2.imread('C:/Users/xpp/Desktop/Lena.png',1)#原始图像
cv2.imshow("original",o)
histb=cv2.calcHist([o],[0],None,[256],[0,255])#绘制B分量直方图
histg=cv2.calcHist([o],[1],None,[256],[0,255])#绘制G分量直方图
histr=cv2.calcHist([o],[2],None,[256],[0,255])#绘制R分量直方图
(b,g,r)=cv2.split(o)#拆分红、绿、蓝3个颜色通道
bH=cv2.equalizeHist(b)
gH=cv2.equalizeHist(g)
rH=cv2.equalizeHist(r)
result=cv2.merge((bH,gH,rH))#合并红、绿、蓝3个颜色通道
cv2.imshow("result",result)
Hb=cv2.calcHist([result],[0],None,[256],[0,255])#绘制B分量直方图均衡化
Hg=cv2.calcHist([result],[1],None,[256],[0,255])#绘制G分量直方图均衡化
Hr=cv2.calcHist([result],[2],None,[256],[0,255])#绘制R分量直方图均衡化
plt.figure("原始图像直方图")
plt.plot(histb,color='b')
plt.plot(histg,color='g')
plt.plot(histr,color='r')
plt.figure("均衡化结果直方图")
plt.plot(Hb,color='b')
plt.plot(Hg,color='g')
plt.plot(Hr,color='r')
cv2.waitKey()
cv2.destroyAllWindows()
算法:颜色直方图均衡化是在许多图像检索系统中被广泛采用的颜色特征,会出现色彩失真。
- 首先将图像分解成通道B、G、R
- 然后这些通道分别进行直方图均衡化
- 最后合并所有通道
b, g, r=cv2.split(img)
- img表示输入图像
img=cv2.merge([b, g, r])
- b、g、r分别表示通道B、G、R
书籍:《数字图像处理与机器视觉——Visual C 与Matlab实现》