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,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 函数,用于绘制线条图。
应用:
图像直方图可用于:
- 图像增强: 例如,通过调整直方图来提高图像的对比度。
- 图像分割: 例如,通过分析直方图来识别图像中的不同区域。
- 图像比较: 例如,通过比较不同图像的直方图来确定它们之间的相似性或差异。
原文地址: https://www.cveoy.top/t/topic/jth4 著作权归作者所有。请勿转载和采集!