5-3 直方图均衡化

#灰度 直方图均衡化
import cv2
import numpy as np
img = cv2.imread('image0.jpg',1)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.imshow('src',gray)
dst = cv2.equalizeHist(gray)
cv2.imshow('dst',dst)
cv2.waitKey(0)

 我们使用直方图均衡化的时候,必须要对单通道进行处理。所以我们首先要完成通道的分解。我们要把原来的三通道分解成单通道。

split()方法。将彩色图片传递进去之后,它返回的就是一个三通道数据。我们分别把三通道数据为大家实现一下。

这样我们分别就有三个通道完成了直方图的均衡化。但是通道分解完之后我们要合并在一起。

经过直方图均衡化之后,整个图片的颜色发生了一定的变化。这是彩色图片均衡化。

#彩色 直方图均衡化
import cv2
import numpy as np
img = cv2.imread('image0.jpg',1)
#gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.imshow('src',img)
(b,g,r) = cv2.split(img)# 通道分解
bH = cv2.equalizeHist(b)#bH定义的是b通道的直方图均衡化之后的结果,我们将b通道的数据传递进去
gH = cv2.equalizeHist(g)
rH = cv2.equalizeHist(r)
result = cv2.merge((bH,gH,rH))#merge()方法是opencv自带的 通道合成
#dst = cv2.equalizeHist(gray)
#cv2.imshow('dst',dst)
cv2.imshow('dst',result)
cv2.waitKey(0)

图片读取进来之后我们要进行YUV的分解。这个cvt方法不光能实现彩色图片转化为灰度图片,还可以实现RGB图片转化为当前的YUV图片。

YUV同样是由三个元素组成。它是一个三维的。我们首先把第一维获取出来,第一维的结果我们先把它进行直方图的均衡化一下。

均衡化之后我们把当前的YUV三个通道再进行合成,合成一个channels。合成之后我们需要把当前的YUV再转成BGR图片。

#YUV 直方图均衡化
import cv2
import numpy as np
img = cv2.imread('image0.jpg',1)
#gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
imgYUV = cv2.cvtColor(img,cv2.COLOR_BGR2YCrCb)
#cv2.imshow('src',gray)
cv2.imshow('src',img)
channelYUV = cv2.split(imgYUV)
channelYUV[0] = cv2.equalizeHist(channelYUV[0])
#dst = cv2.equalizeHist(gray)
channels = cv2.merge(channelYUV)
result = cv2.cvtColor(channels,cv2.COLOR_YCrCb2BGR)
#cv2.imshow('dst',dst)
cv2.imshow('dst',result)
cv2.waitKey(0)

 

posted on 2018-09-30 23:41  绿茵好莱坞  阅读(859)  评论(0编辑  收藏  举报

导航