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

# 显示两个直方图
plt.subplot(2, 1, 1)
plt.imshow(img)
plt.title('原始图像')

plt.subplot(2, 2, 3)
plt.plot(hist1)
plt.title('Matplotlib 直方图')

plt.subplot(2, 2, 4)
plt.plot(hist2)
plt.title('OpenCV 直方图')

plt.tight_layout()
plt.show()

OpenCV 和 Matplotlib 绘制图像直方图教程

本教程将教你如何使用 OpenCV 和 Matplotlib 库在 Python 中绘制图像直方图。

什么是图像直方图?

图像直方图是一种图表,它显示了图像中每个像素强度值出现的频率。它提供有关图像对比度、亮度和像素分布的信息。

如何使用 OpenCV 和 Matplotlib 绘制直方图

以下是如何使用 OpenCV 和 Matplotlib 绘制图像直方图的分步指南:

  1. 导入必要的库: 首先,导入必要的库:

    import cv2
    import numpy as np
    import matplotlib.pyplot as plt
    
  2. 加载图像: 使用 cv2.imread() 函数加载图像:

    img = cv2.imread('C:/Users/LENOVO/Desktop/c.jpg')
    
  3. 计算直方图: 你可以使用 Matplotlib 的 plt.hist() 函数或 OpenCV 的 cv2.calcHist() 函数计算直方图。

    • 使用 Matplotlib
      hist1, _ = plt.hist(img.ravel(), 256)
      
      这里,img.ravel() 将图像展平为一维数组,256 指定直方图中的 bin 数量。
    • 使用 OpenCV
      hist2 = cv2.calcHist([img], [0], None, [256], [0, 255])
      
      这里,[img] 是输入图像数组,[0] 是要计算直方图的通道(在本例中为蓝色通道),None 表示没有使用掩码,[256] 是 bin 数量,[0, 255] 是像素值范围。
  4. 显示直方图: 使用 Matplotlib 的绘图函数显示直方图:

    plt.subplot(2, 1, 1)
    plt.imshow(img)
    plt.title('原始图像')
    
    plt.subplot(2, 2, 3)
    plt.plot(hist1)
    plt.title('Matplotlib 直方图')
    
    plt.subplot(2, 2, 4)
    plt.plot(hist2)
    plt.title('OpenCV 直方图')
    
    plt.tight_layout()
    plt.show()
    

常见错误和解决方案

在绘制直方图时,你可能会遇到一些常见错误:

1. TypeError: Image data of dtype object cannot be converted to float 此错误是因为 plt.imshow() 函数试图显示一个非图像数组。要解决此问题,请使用 plt.plot() 函数显示直方图数据,如上例所示。

2. MatplotlibDeprecationWarning: Auto-removal of overlapping axes is deprecated 此警告是因为 Matplotlib 的默认行为已更改。要解决此问题,请在创建子图时明确指定 ax.remove(),或者使用 plt.tight_layout() 函数自动调整子图之间的间距。

通过遵循本教程,你应该能够使用 OpenCV 和 Matplotlib 成功绘制图像直方图。直方图是理解和可视化图像数据的重要工具,可以帮助你分析图像属性。

OpenCV 和 Matplotlib 绘制图像直方图教程

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

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