python+opencv图像处理(十五)
直方图均衡

(实验原图来源于网络)
完整代码如下:
import cv2
import numpy as np
from matplotlib import pyplot as plt
import matplotlib as mpl
mpl.rcParams['font.sans-serif']=['SimHei'] #指定默认字体 SimHei为黑体
img = cv2.imread('E:\\image\\lena1.jpg',0)#读入灰度图像
equ = cv2.equalizeHist(img)#直方图均衡,返回值为均衡化后的图
plt.subplot(221),plt.imshow(img,'gray'),plt.title("原图")
plt.subplot(222),plt.imshow(equ,'gray'),plt.title("均衡化后的图")
plt.subplot(223),plt.hist(img.ravel(),256,[0,256]),plt.title("原图直方图")
plt.subplot(224),plt.hist(equ.ravel(),256,[0,256]),plt.title("均衡化后的直方图")
plt.show()
---------------------------------我是广告的分界线
---------------------------------我是广告的分界线

其完整代码如下:
import cv2
import numpy as np
from matplotlib import pyplot as plt
import matplotlib as mpl
mpl.rcParams['font.sans-serif']=['SimHei']
img = cv2.imread('E:\\image\\lena.jpg')
(b,g,r)=cv2.split(img)#拆分图像
bH = cv2.equalizeHist(b)#合通道进行直方图均衡
gH = cv2.equalizeHist(g)
rH = cv2.equalizeHist(r)
result = cv2.merge((bH, gH, rH))#融合回原图像
plt.subplot(221),plt.imshow(img[:,:,[2,1,0]])
plt.title("原图")
plt.subplot(222),plt.imshow(result[:,:,[2,1,0]])
plt.title("均衡化后的图")
plt.subplot(223)
color = ('b', 'g', 'r')
for i , color in enumerate(color):
hist = cv2.calcHist([img], [i], None, [256], [0, 256])
plt.plot(hist, color)
plt.title("原图直方图")
plt.subplot(224)
color = ('b', 'g', 'r')
for i , color in enumerate(color):
hist = cv2.calcHist([result], [i], None, [256], [0, 256])
plt.plot(hist, color)
plt.title("均衡化后的直方图")
plt.show()

(实验原图来源于网络)
(图像不好找啊!!!)
其完整代码如下:
import cv2
import numpy as np
from matplotlib import pyplot as plt
import matplotlib as mpl
mpl.rcParams['font.sans-serif']=['SimHei']
img = cv2.imread('E:\\image\\car.jpg')
img_yuv=cv2.cvtColor(img,cv2.COLOR_BGR2YUV)#转换至YUV颜色空间
img_yuv[:,:,0]=cv2.equalizeHist(img_yuv[:,:,0])#对亮度空间进行直方图均衡
result = cv2.cvtColor(img_yuv,cv2.COLOR_YUV2BGR)#转换回彩色图像
plt.subplot(221),plt.imshow(img[:,:,[2,1,0]]),plt.title("原图")
plt.subplot(222),plt.imshow(result[:,:,[2,1,0]]),plt.title("均衡化后的图")
plt.subplot(223)
color = ('b', 'g', 'r')
for i , color in enumerate(color):
hist = cv2.calcHist([img], [i], None, [256], [0, 256])
plt.plot(hist, color)
plt.title("原图直方图")
plt.subplot(224)
for i , color in enumerate(color):
hist = cv2.calcHist([result], [i], None, [256], [0, 256])
plt.plot(hist, color)
plt.title("均衡化后的直方图")
plt.show()
