图像直方图(image Histogram)
- 首先执行:pip install matplotlib;
术语简介:
- dims:需要统计的特征数目;例如dims == 1,代表仅仅统计灰度值。
- bins:每个特征空间自区段的数目;
- range:每个特征空间的取值范围;
直方图的意义:
- 图像中像素强度分布的图形表达方式
- 统计了每一个强度值所具有的像素个数
图像直方图的绘制:
1. 通过plot进行绘制(matplotlib库):
def plot_demo(image):
plt.hist(image.ravel(), 256, [0, 256]);
plt.show("直方图");
bins = 256;特征空间区段数
range = [0 , 256];特征空间的取值范围;
2. 通过calcHist()绘制(opencv库):
def image_hist(image):
color = ('blue', 'green', 'red') #元组数据结构
for i, color in enumerate(color):
hist = cv.calcHist([image], [i], None, [256], [0, 256]);
plt.plot(hist, color = color);
plt.xlim([0, 256]);
plt.show("彩色直方图");
histSize:存放每个维度的直方图尺寸的数组,记录一个维度中,有多少个bins数组(有多少个分栏范围)。
ranges:表示每一个维度数组(第六个参数 dims)的每一维的边界阵列,可以理解为每一维数值的取值范围;一般情况下,histSize与ranges是恰好对应的。
直方图的应用:
- 直方图均衡化:图像增强,提升对比度。
全局均衡化:
def equalHist_demo(image):
gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY);
dst = cv.equalizeHist(gray);
cv.imshow("equal_image", dst);
局部自适应均衡化:
#achieve local equlization
def clahe_demo(image):
gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY);
clahe = cv.createCLAHE(clipLimit = 2.0, tileGridSize = (8,8));
dst = clahe.apply(gray);
cv.imshow("clache_image", dst);