OpenCV+python:直方图的概念及绘制(Histogram)
生活随笔
收集整理的這篇文章主要介紹了
OpenCV+python:直方图的概念及绘制(Histogram)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1,直方圖的概念
圖像直方圖是反映一個圖像像素分布的統(tǒng)計表,其實橫坐標代表了圖像像素的種類,可以是灰度的,也可以是彩色的。縱坐標代表了每一種顏色值在圖像中的像素總數(shù)或者占所有像素個數(shù)的百分比。圖像是由像素構成,因為反映像素分布的直方圖往往可以作為圖像一個很重要的特征。
圖像灰度直方圖:
一幅圖像由不同灰度值的像素組成,圖像中灰度的分布情況是該圖像的一個重要特征。圖像的灰度直方圖就描述了圖像中灰度分布情況,能夠很直觀的展示出圖像中各個灰度級所占的多少。圖像的灰度直方圖是灰度級的函數(shù),描述的是圖像中具有該灰度級的像素的個數(shù):其中,橫坐標是灰度級,縱坐標是該灰度級出現(xiàn)的頻率
歸一化直方圖:
通常會將縱坐標歸一化到[0,1]區(qū)間內,也就是將灰度級出現(xiàn)的頻率(像素個數(shù))除以圖像中像素的總數(shù)。灰度直方圖的計算公式如下:
其中,rk是像素的灰度級,nk是具有灰度rk的像素的個數(shù),MN是圖像中總的像素個數(shù)。
2,直方圖的繪制
import cv2 as cv
import numpy as npfrom matplotlib import pyplot as plt
#%matplotlib inlinedef plot_demo(image):plt.hist(image.ravel(), 256, [0, 256]) #image.ravel()#ravel函數(shù)功能是將多維數(shù)組降為一維數(shù)組,統(tǒng)計各個bin的頻次,256:bin的個數(shù),[0, 256]:范圍plt.show("直方圖") #和OpenCV中的想要的直方圖不同
"""
畫灰度圖直方圖:繪圖都可以調用matplotlib.pyplot庫來進行,其中的hist函數(shù)可以直接繪制直方圖。plt.hist(arr, bins=50, normed=1, facecolor='green', alpha=0.75)hist的參數(shù)非常多,但常用的就這五個,只有第一個是必須的,后面四個可選arr: 需要計算直方圖的一維數(shù)組bins: 直方圖的柱數(shù),可選項,默認為10normed: 是否將得到的直方圖向量歸一化。默認為0range參數(shù)表示箱子的下限和上限。即橫坐標顯示的范圍,范圍之外的將被舍棄
"""def image_hist(image):color = ('blue', 'green', 'red') #圖像三通道for i, color in enumerate(color):hist = cv.calcHist([image], [i], None, [256], [0, 256]) #繪制各個通道的直方圖plt.plot(hist, color=color) #定義線的顏色plt.xlim([0, 256]) #x軸的范圍plt.show()
"""
calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate]])
images參數(shù)表示輸入圖像,傳入時應該用中括號[ ]括起來channels參數(shù)表示傳入圖像的通道,如果是灰度圖像,那就不用說了,只有一個通道,值為0,
如果是彩色圖像(有3個通道),那么值為0,1,2,中選擇一個,對應著BGR各個通道。這個值也得用[ ]傳入。mask參數(shù)表示掩膜圖像。如果統(tǒng)計整幅圖,那么為None。
主要是如果要統(tǒng)計部分圖的直方圖,就得構造相應的掩膜來計算。histSize參數(shù)表示灰度級的個數(shù),需要中括號,比如[256]ranges參數(shù)表示像素值的范圍,通常[0,256]。此外,假如channels為[0,1],ranges為[0,256,0,180],
則代表0通道范圍是0-256,1通道范圍0-180。hist參數(shù)表示計算出來的直方圖。"""src = cv.imread("F:/images/lena.png")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
plot_demo(src)
image_hist(src)
cv.waitKey(0)cv.destroyAllWindows()
運行結果:
總結
以上是生活随笔為你收集整理的OpenCV+python:直方图的概念及绘制(Histogram)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 送寒冰公主
- 下一篇: OpenCV+python:直方图的应用