案例© Fu Xianjun. All Rights Reserved.
直方图是什么?直方图的含义。
直方图是图像处理过程中的一种非常重 要的分析工具。直方图从图像内部灰度级的角度对图像进行表述,包含十分丰富而重要的信息。从直方图的角度对图像进行处理,可以达到增强图像显示效果的目的。
从统计的角度讲,直方图是图像内灰度值的统计特性与图像灰度值之间的函数,直方图统计图像内各个灰度级出现的次数。从直方图的图形上观察,横坐标是图像中各像素点的灰度级,纵坐标是具有该灰度级(像素值)的像素个数
绘制彩色的直方图
import cv2
import numpy as np
img=cv2.imread("bd.jpg")
histb = cv2.calcHist([img],[0],None,[256],[0,255])
histg = cv2.calcHist([img],[1],None,[256],[0,255])
histr = cv2.calcHist([img],[2],None,[256],[0,255])
plt.plot(histb,color='b')
plt.plot(histg,color='g')
plt.plot(histr,color='r')
使用掩膜进行直方图绘制
import cv2
import numpy as np
import matplotlib.pyplot as plt
img=cv2.imread("hj.jpg",0)
w,h=img.shape
mask=np.zeros([w,h],np.uint8)
mask[(w-200):w,0:200]=255
hist = cv2.calcHist([img],[0],None,[256],[0,255])
hist_mask = cv2.calcHist([img],[0],mask,[256],[0,255])
# cv2.imshow('mask',mask)
plt.plot(hist,color='b')
plt.plot(hist_mask,color='g')
cv2.waitKey()
cv2.destroyAllWindows()
直方图均衡化
import cv2
import numpy as np
img=cv2.imread("hj.jpg",0)
equ=cv2.equalizeHist(b)
hist = cv2.calcHist([equ],[0],None,[256],[0,255])
plt.plot(hist,color='b')
cv2.imshow("equ",equ)
cv2.waitKey()
cv2.destroyAllWindows()
彩色图像直方图自适应均衡化
import cv2
import numpy as np
img=cv2.imread("qb.jpg")
b,g,r=cv2.split(img)
clah=cv2.createCLAHE(clipLimit=2.0,tileGridSize=(8,8))
equb=clah.apply(b)
equg=clah.apply(g)
equr=clah.apply(r)
img_new=cv2.merge([equb,equg,equr])
histb = cv2.calcHist([img_new],[0],None,[256],[0,255])
histg = cv2.calcHist([img_new],[1],None,[256],[0,255])
histr = cv2.calcHist([img_new],[2],None,[256],[0,255])
plt.plot(histb,color='b')
plt.plot(histg,color='g')
plt.plot(histr,color='r')
cv2.imshow("img",img)
cv2.imshow("img_new",img_new)
cv2.waitKey()
cv2.destroyAllWindows()