用python对彩色图像进行直方图均衡化处理
1、色彩分离:
把图片分成若干个单通道的灰度图。
img[:,:,0]是第一个通道。
2、构造单通道图像的直方图:
hist = cv2.calcHist([img[:,:,0]],[0],None,[256],[0,256])
绘制直方图:
plt.plot(hist,color='b')
可以发现,这个图的直方图集中在暗区,说明图像偏暗。
3、第二个通道图像的直方图:
hist = cv2.calcHist([img[:,:,1]],[0],None,[256],[0,256])
plt.plot(hist,color='g')
4、第三个通道图像的直方图:
hist = cv2.calcHist([img[:,:,2]],[0],None,[256],[0,256])
plt.plot(hist,color='r')
5、把三个直方图画到一起:
hist = cv2.calcHist([img[:,:,0]],[0],None,[256],[0,256])
plt.plot(hist,color='b')
hist = cv2.calcHist([img[:,:,1]],[0],None,[256],[0,256])
plt.plot(hist,color='g')
hist = cv2.calcHist([img[:,:,2]],[0],None,[256],[0,256])
plt.plot(hist,color='r')
6、可以发现,第一个通道的直方图相对于另外两个通道,更不均衡,所以这里,只对第一个通道的图像进行均衡化处理:
pic = cv2.equalizeHist(img[:,:,0])
下面第一幅图,是处理前的效果图,第二幅图,是处理后的效果图。
7、看看处理后的直方图。
hist = cv2.calcHist([pic],[0],None,[256],[0,256])
plt.plot(hist,color='b')
8、再对pic进行均衡化处理,连续执行10次。
效果图如下,变化不明显。
9、合并通道,也就是合并为彩色图像:
im=cv2.merge([pic,img[:,:,1],img[:,:,2]])
后面的图像是新图,前面的图像是原图。
10、新的彩色图像的直方图。