Python+OpenCV繪制灰度直方圖詳解
1.直方圖的概念
圖像直方圖是反映一個圖像像素分布的統(tǒng)計表,其實橫坐標(biāo)代表了圖像像素的種類,可以是灰度的,也可以是彩色的。縱坐標(biāo)代表了每一種顏色值在圖像中的像素總數(shù)或者占所有像素個數(shù)的百分比。圖像是由像素構(gòu)成,因為反映像素分布的直方圖往往可以作為圖像一個很重要的特征。
圖像灰度直方圖:
一幅圖像由不同灰度值的像素組成,圖像中灰度的分布情況是該圖像的一個重要特征。圖像的灰度直方圖就描述了圖像中灰度分布情況,能夠很直觀的展示出圖像中各個灰度級所占的多少。圖像的灰度直方圖是灰度級的函數(shù),描述的是圖像中具有該灰度級的像素的個數(shù):其中,橫坐標(biāo)是灰度級,縱坐標(biāo)是該灰度級出現(xiàn)的頻率
歸一化直方圖:
通常會將縱坐標(biāo)歸一化到[0,1]區(qū)間內(nèi),也就是將灰度級出現(xiàn)的頻率(像素個數(shù))除以圖像中像素的總數(shù)?;叶戎狈綀D的計算公式如下:

其中,rk是像素的灰度級,nk是具有灰度rk的像素的個數(shù),MN是圖像中總的像素個數(shù)。
代碼
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
#%matplotlib inline
def 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中的想要的直方圖不同
"""
畫灰度圖直方圖:
繪圖都可以調(diào)用matplotlib.pyplot庫來進(jìn)行,其中的hist函數(shù)可以直接繪制直方圖。
plt.hist(arr, bins=50, normed=1, facecolor='green', alpha=0.75)
hist的參數(shù)非常多,但常用的就這五個,只有第一個是必須的,后面四個可選
arr: 需要計算直方圖的一維數(shù)組
bins: 直方圖的柱數(shù),可選項,默認(rèn)為10
normed: 是否將得到的直方圖向量歸一化。默認(rèn)為0
range參數(shù)表示箱子的下限和上限。即橫坐標(biāo)顯示的范圍,范圍之外的將被舍棄
"""
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ù)表示輸入圖像,傳入時應(yīng)該用中括號[ ]括起來
channels參數(shù)表示傳入圖像的通道,如果是灰度圖像,那就不用說了,只有一個通道,值為0,
如果是彩色圖像(有3個通道),那么值為0,1,2,中選擇一個,對應(yīng)著BGR各個通道。這個值也得用[ ]傳入。
mask參數(shù)表示掩膜圖像。如果統(tǒng)計整幅圖,那么為None。
主要是如果要統(tǒng)計部分圖的直方圖,就得構(gòu)造相應(yī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()原圖

二維直返圖

RGB直方圖

到此這篇關(guān)于Python+OpenCV繪制灰度直方圖詳解的文章就介紹到這了,更多相關(guān)Python OpenCV灰度直方圖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python基于twisted實現(xiàn)簡單的web服務(wù)器
這篇文章主要介紹了Python基于twisted實現(xiàn)簡單的web服務(wù)器,可模擬出簡單的web服務(wù)器功能,是很實用的技巧,需要的朋友可以參考下2014-09-09
使用Arcgis做路徑規(guī)劃方式(使用python腳本調(diào)用)
本文介紹了如何使用ArcGIS和Python來解決鐵路路徑規(guī)劃問題,通過配置ArcGIS、導(dǎo)入路網(wǎng)數(shù)據(jù)和列車行駛點數(shù)據(jù)、處理線要素、構(gòu)建拓?fù)浣Y(jié)構(gòu),可以使用Network?Analyst工具進(jìn)行路徑分析,最后,通過Python腳本自動化處理大量數(shù)據(jù),生成最優(yōu)路徑2024-12-12
Python入門(六)Python數(shù)據(jù)類型
這篇文章主要介紹了Python入門(六)Python數(shù)據(jù)類型,Python是一門非常強大好用的語言,也有著易上手的特性,本文為入門教程,需要的朋友可以參考下2023-04-04
利用Python腳本在Nginx和uwsgi上部署MoinMoin的教程
這篇文章主要介紹了利用Python腳本在Nginx和uwsgi上部署MoinMoin的教程,示例基于CentOS操作系統(tǒng),需要的朋友可以參考下2015-05-05
Spring http服務(wù)遠(yuǎn)程調(diào)用實現(xiàn)過程解析
這篇文章主要介紹了Spring http服務(wù)遠(yuǎn)程調(diào)用實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-06-06
sklearn線性邏輯回歸和非線性邏輯回歸的實現(xiàn)
這篇文章主要介紹了sklearn線性邏輯回歸和非線性邏輯回歸的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
在Python3 numpy中mean和average的區(qū)別詳解
今天小編就為大家分享一篇在Python3 numpy中mean和average的區(qū)別詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08

