目录:
1.绘制直方图
1)一维直方图
2)2D直方图
2.直方图均衡化
1)全局直方图均衡化
2)CLAHE(限制对比度的自适应直方图均衡化)-->局部
3.直方图反向投影
一、绘制直方图
直方图:统计每个像素在图像矩阵中出现的次数或概率。
OpenCV函数:
绘制直方图
cv2.calcHist(images, channels, mask, histSize, ranges, hist=None, accumulate=None)
参数:
img:输入图像,为列表,如[img]。
channels: 计算的通道,为列表,如[0]表示单通道,[0, 1]统计两个通道。
mask: 掩模,和输入图像大小一样的矩阵,为1的地方会进行统计(与图像逻辑与后再统计);无掩模时为None。
histSize: 每一个channel对应的bins(柱子)个数,为列表,如[256]表示256个像素值。
ranges: bins的边界,为列表,如[0,256]表示像素值范围在0-256之间。-->使用切片的原理,含前不含后。
1)一维直方图
一般将图像从BGR转换为灰度图来绘制一维直方图,也可绘制单通道的1D直方图。
# 1)一维直方图
import cv2
import matplotlib.pyplot as plt
img = cv2.imread("image/1.jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 转化为灰度图
# 绘制灰度图的直方图
hist_gray = cv2.calcHist(images=[gray], channels=[0], mask=None, histSize=[256], ranges=[0, 256])
# 绘制单通道B的直方图
hist_B = cv2.calcHist([img], [0], None, [256], [0, 256])
# 绘制单通道G的直方图
hist_G = cv2.calcHist([img], [1], None, [256], [0, 256])
# 绘制单通道R的直方图
hist_R = cv2.calcHist([img], [2], None, [256], [0, 256])
plt.plot(hist_gray, color="gray", label="Gray")
plt.plot(hist_B, color="b", label="B")
plt.plot(hist_G, color="g", label="G")
plt.plot(hist_R, color="r", label="R")
plt.show()