OpenCV Python - 直方圖



直方圖顯示影像中畫素強度的分佈。它將畫素值(0 到 255)繪製在 X 軸上,並將畫素數量繪製在 Y 軸上。

透過使用直方圖,可以瞭解指定影像的對比度、亮度和強度分佈。直方圖中的柱狀圖表示 X 軸上值的增量部分。

在本例中,它是畫素值,預設的柱狀圖大小為 1。

在 OpenCV 庫中,函式 `cv2.calcHist()` 用於計算輸入影像的直方圖。該函式的命令如下:

cv.calcHist(images, channels, mask, histSize, ranges)

引數

`cv2.calcHist()` 函式的引數如下:

  • `images` - 它是 uint8 或 float32 型別的源影像,用方括號括起來,即 "[img]"。

  • `channels` - 它是計算直方圖的通道索引。對於灰度影像,其值為 [0]。對於 BGR 影像,您可以傳遞 [0]、[1] 或 [2] 來計算每個通道的直方圖。

  • `mask` - 對於整幅影像,掩碼影像設定為 "None"。對於影像的特定區域,您必須為此建立一個掩碼影像並將其作為掩碼。

  • `histSize` - 這代表我們的柱狀圖數量。

  • `ranges` - 通常為 [0,256]。

使用 Matplotlib 繪製直方圖

可以使用 Matplotlib 的 `pyplot.plot()` 函式或呼叫 OpenCV 庫中的 `Polylines()` 函式來獲得直方圖。

示例

下面的程式計算影像 (lena.jpg) 中每個通道的直方圖,並繪製每個通道的強度分佈:

import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
img = cv.imread('lena.jpg')
color = ('b','g','r')
for i,col in enumerate(color):
   hist = cv.calcHist([img],[i],None,[256],[0,256])
   plt.plot(hist, color = col)
   plt.xlim([0,256])
plt.show()

輸出

Histogram
廣告
© . All rights reserved.