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()

代码说明:

  1. 读取图像: 使用 cv2.imread() 函数读取图像。
  2. 颜色空间转换: 使用 cv2.cvtColor() 函数将彩色图像转换为灰度图像。
  3. 计算直方图: 使用 plt.hist()cv2.calcHist() 函数计算图像直方图。
  4. 计算累积直方图: 使用 np.cumsum() 函数计算累积直方图。
  5. 直方图归一化: 将累积直方图归一化到 [0, 255] 范围内,以便于显示和比较。
  6. 显示图像和直方图: 使用 plt.imshow(), plt.hist(), 和 plt.plot() 函数显示图像和直方图。

总结:

这篇博客文章介绍了如何使用 OpenCV 和 Python 计算和绘制图像直方图。图像直方图是图像处理中的一个重要概念,可以用于图像增强、分割和目标识别等应用。

OpenCV 直方图计算与绘制:从入门到精通

原文地址: https://www.cveoy.top/t/topic/jthv 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录