使用OpenCV绘制图像的直方图需要以下步骤:

  1. 导入OpenCV模块和NumPy模块:

    import cv2
    import numpy as np
    
  2. 读取图像并转换为灰度图像:

    img = cv2.imread('image.jpg')
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    
  3. 计算直方图:

    hist = cv2.calcHist([gray], [0], None, [256], [0, 256])
    

    这里使用cv2.calcHist函数计算灰度图像的直方图。函数的参数解释如下:

    • [gray]:输入图像,必须是一个列表,即使只有一个图像也要放在列表中。
    • [0]:指定通道,对于灰度图像只有一个通道,所以为0。
    • None:掩膜,如果没有掩膜则为None。
    • [256]:直方图的大小,表示灰度级别的数量,这里设置为256。
    • [0, 256]:像素值的范围,这里表示灰度级别的范围。
  4. 绘制直方图:

    hist = np.squeeze(hist)
    hist_img = np.zeros((256, 256, 3), dtype=np.uint8)
    cv2.normalize(hist, hist, 0, 255, cv2.NORM_MINMAX)
    for i in range(256):
        cv2.line(hist_img, (i, 255), (i, 255 - hist[i]), (255, 255, 255))
    
    • np.squeeze(hist):将直方图数组中的多余维度去掉。
    • np.zeros((256, 256, 3), dtype=np.uint8):创建一个空白图像,大小为256x256,通道数为3。
    • cv2.normalize(hist, hist, 0, 255, cv2.NORM_MINMAX):将直方图数组归一化到0-255范围内。
    • for i in range(256)::遍历每个灰度级别。
    • cv2.line(hist_img, (i, 255), (i, 255 - hist[i]), (255, 255, 255)):在空白图像上绘制直方图线条。
  5. 显示直方图:

    cv2.imshow('histogram', hist_img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    使用cv2.imshow函数显示直方图,使用cv2.waitKey等待按键,使用cv2.destroyAllWindows关闭窗口。

完整代码如下:

import cv2
import numpy as np

img = cv2.imread('image.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

hist = cv2.calcHist([gray], [0], None, [256], [0, 256])

hist = np.squeeze(hist)
hist_img = np.zeros((256, 256, 3), dtype=np.uint8)
cv2.normalize(hist, hist, 0, 255, cv2.NORM_MINMAX)
for i in range(256):
    cv2.line(hist_img, (i, 255), (i, 255 - hist[i]), (255, 255, 255))

cv2.imshow('histogram', hist_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
如何用opencv绘制图像的直方图

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

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