OpenCV 直方图计算与绘制:从入门到精通
import cv2
import numpy as np
import matplotlib.pyplot as plt
# 读取图像
img = cv2.imread('C:/Users/LENOVO/Desktop/c.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 计算彩色图像的直方图
hist1 = plt.hist(img.ravel(), 256)
hist2 = cv2.calcHist([img], [0], None, [256], [0, 255])
# 计算灰度图像的直方图
hist3 = cv2.calcHist([gray], [0], None, [256], [0, 255])
# 计算累积直方图
cumulative_hist = np.cumsum(hist3)
# 将累积直方图归一化到[0,255]范围内
cumulative_hist_normalized = cumulative_hist * 255 / cumulative_hist[-1]
# 显示图像和直方图
plt.subplot(2, 2, 1)
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) # 将BGR转换为RGB以供matplotlib显示
plt.title('Image')
plt.subplot(2, 2, 2)
plt.hist(img.ravel(), 256, [0, 256])
plt.title('Color Histogram (plt.hist)')
plt.subplot(2, 2, 3)
plt.plot(hist2)
plt.title('Color Histogram (cv2.calcHist)')
plt.subplot(2, 2, 4)
plt.plot(cumulative_hist_normalized)
plt.title('Normalized Cumulative Histogram')
plt.tight_layout()
plt.show()
代码说明:
- 读取图像: 使用
cv2.imread()函数读取图像。 - 颜色空间转换: 使用
cv2.cvtColor()函数将彩色图像转换为灰度图像。 - 计算直方图: 使用
plt.hist()和cv2.calcHist()函数计算图像直方图。 - 计算累积直方图: 使用
np.cumsum()函数计算累积直方图。 - 直方图归一化: 将累积直方图归一化到 [0, 255] 范围内,以便于显示和比较。
- 显示图像和直方图: 使用
plt.imshow(),plt.hist(), 和plt.plot()函数显示图像和直方图。
总结:
这篇博客文章介绍了如何使用 OpenCV 和 Python 计算和绘制图像直方图。图像直方图是图像处理中的一个重要概念,可以用于图像增强、分割和目标识别等应用。
原文地址: https://www.cveoy.top/t/topic/jthv 著作权归作者所有。请勿转载和采集!