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,1]范围内
hist3 = cumulative_hist / cumulative_hist[-1]


# 显示两个直方图
plt.subplot(2, 1, 1)
plt.imshow(img)
plt.subplot(2, 2, 2)
plt.hist(img.ravel(), 256)
plt.subplot(2, 2, 3)
plt.plot(hist2)
plt.subplot(2, 2, 4)
plt.plot(hist3)
plt.show()

解释:

代码中,img 被用于计算直方图,但并没有直接显示出来。plt.subplot 函数用于创建子图,参数分别表示子图的行数、列数和当前子图的编号。

  • plt.subplot(2, 1, 1) 创建一个 2 行 1 列的子图,并在左上角显示原始图像 img
  • plt.subplot(2, 2, 2) 创建一个 2 行 2 列的子图,并在右上角显示彩色图像的直方图 hist1
  • plt.subplot(2, 2, 3) 创建一个 2 行 2 列的子图,并在左下角显示彩色图像的直方图 hist2
  • plt.subplot(2, 2, 4) 创建一个 2 行 2 列的子图,并在右下角显示灰度图像的累积直方图 hist3

因此,最终显示了三个直方图和原始图像。

关键概念:

  • 直方图: 图像直方图表示图像中每个灰度级出现的频率。
  • 累积直方图: 累积直方图是直方图的累积和,表示图像中小于或等于某个灰度级的像素数量。
  • cv2.calcHist OpenCV 函数,用于计算图像的直方图。
  • plt.subplot Matplotlib 函数,用于创建子图。
  • plt.imshow Matplotlib 函数,用于显示图像。
  • plt.hist Matplotlib 函数,用于绘制直方图。
  • plt.plot Matplotlib 函数,用于绘制线条图。

应用:

图像直方图可用于:

  • 图像增强: 例如,通过调整直方图来提高图像的对比度。
  • 图像分割: 例如,通过分析直方图来识别图像中的不同区域。
  • 图像比较: 例如,通过比较不同图像的直方图来确定它们之间的相似性或差异。
OpenCV 图像直方图可视化:彩色和灰度图像

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

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