1、问题描述
使用直方图均衡化的手段可以增大图像的对比度,目前我们学到的都是在单通道的灰度图像处理。那么对于彩色图像该如何处理呢?实际上使用opencv提供的split方法将RGB图像分为R,G,B三个通道的图像,分别对每个通道下的图像进行直方图均衡化处理,再将处理好以后的图像使用merge函数合并。这样就是彩色图像的直方图均衡化处理了。
2、效果展示
2.1 均衡化前后直方图变换
2.2 图像变化
3、具体代码
def Split(image):
B,G,R = cv.split(image)
hist_B_1 = cv.calcHist([B],[0],None,[256],[0,255])
B_equal = cv.equalizeHist(B)
hist_B_2 = cv.calcHist([B_equal],[0],None,[256],[0,255])
hist_G_1 = cv.calcHist([G],[0],None,[256],[0,255])
G_equal = cv.equalizeHist(G)
hist_G_2 = cv.calcHist([G_equal],[0],None,[256],[0,255])
hist_R_1 = cv.calcHist([R],[0],None,[256],[0,255])
R_equal = cv.equalizeHist(R)
hist_R_2 = cv.calcHist([R_equal],[0],None,[256],[0,255])
plt.subplot(3,2,1)
plt.plot(hist_B_1,'r')
plt.subplot(3,2,2)
plt.plot(hist_B_2,'b')
plt.subplot(3, 2, 3)
plt.plot(hist_G_1,'r')
plt.subplot(3, 2, 4)
plt.plot(hist_G_2,'b')
plt.subplot(3, 2, 5)
plt.plot(hist_R_1,'r')
plt.subplot(3, 2, 6)
plt.plot(hist_R_2,'b')
plt.show()
Result_0 = cv.merge([B_equal,G_equal,R_equal])
Result_1 = cv.hconcat((image,Result_0))
cv.imshow('Result',Result_1)
cv.waitKey()
return;