Opencv中的cv2.calcHist()函數(shù)的作用及返回值說明
在討論其返回值前,我們先來介紹以下calcHist()函數(shù)的用法:
cv2.calcHist()函數(shù)
cv2.calcHist()函數(shù)的作用
通過直方圖可以很好的對整幅圖像的灰度分布有一個(gè)整體的了解,直方圖的x軸是灰度值(0~255),y軸是圖片中具有同一個(gè)灰度值的點(diǎn)的數(shù)目。
而calcHist()函數(shù)則可以幫助我們統(tǒng)計(jì)一幅圖像的直方圖
cv2.calcHist(images,channels,mask,histSize,ranges)
images: 原圖像圖像格式為 uint8 或 ?oat32。當(dāng)傳入函數(shù)時(shí)應(yīng) 用中括號 [] 括來例如[img]channels: 同樣用中括號括來它會告函數(shù)我們統(tǒng)幅圖 像的直方圖。如果入圖像是灰度圖它的值就是 [0]如果是彩色 圖像 的傳入的參數(shù)可以是 [0][1][2] 它們分別對應(yīng)著 BGR。mask: 掩模圖像。統(tǒng)整幅圖像的直方圖就把它為 None。但是如果你想統(tǒng)圖像某一分的直方圖的你就制作一個(gè)掩模圖像并使用它。histSize:BIN 的數(shù)目。也應(yīng)用中括號括來BINS: 上面的直方圖顯示了每個(gè)像素值的像素?cái)?shù),即從0到255。即您需要256個(gè)值才能顯示上述直方圖。但是請考慮一下,如果您不需要單獨(dú)查找所有像素值的像素?cái)?shù),而是在像素值間隔內(nèi)查找像素?cái)?shù),該怎么辦?例如,您需要找到介于 0 到 15 之間的像素?cái)?shù),然后是 16 到 31、...、240 到 255。您只需要 16 個(gè)值來表示直方圖。- 因此,只需將整個(gè)直方圖拆分為 16 個(gè)子部分,每個(gè)子部分的值就是其中所有像素計(jì)數(shù)的總和。這每個(gè)子部分都稱為"BIN"。在第一種情況下,條柱數(shù)為256(每個(gè)像素一個(gè)),而在第二種情況下,它只有16。BINS 在 OpenCV 文檔中由術(shù)語histSize表示。
ranges: 像素值范圍常為 [0 256]
示例:
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('cat.jpg', 0) # 0表示灰度圖
hist = cv2.calcHist([img], [0], None, [256], [0, 256])
# print(hist)
# print(hist[175])
# print(type(hist))
plt.hist(img.ravel(),256);
#print(img.ravel())
plt.show()輸出結(jié)果:

示例2:多通道圖的“直方圖”
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('cat.jpg')
color = ('b','g','r')
for i,col in enumerate(color):
histr = cv2.calcHist([img],[i],None,[256],[0,256])
plt.plot(histr,color = col)
plt.xlim([0,256])
print(i,col)輸出結(jié)果:

到這里完整的直方圖就這樣子繪制出來了,但是大家也許會對calcHist的返回值有疑問,到底返回了什么才能畫出來這樣的圖像呢?下面我們則來討論該函數(shù)的返回值
cv2.calcHist()函數(shù)的返回值
對于hist = cv2.calcHist([img],[0],None,[256],[0,256])中,hist是一個(gè)256*1的矩陣,每一個(gè)值代表了每個(gè)灰度值對應(yīng)的像素點(diǎn)數(shù)目
print(type(hist))
<class 'numpy.ndarray'>
輸出的結(jié)果表示這是一個(gè)多維數(shù)組
print(hist)
[[1.000e+00]
[0.000e+00]
[2.000e+00]
[0.000e+00]
.......
[2.010e+02]
[2.180e+02]
[2.160e+02]
[2.660e+02]
[3.350e+02]
[3.110e+02]
[4.670e+02]]
經(jīng)計(jì)算,共有256個(gè)值,即可以輸出hist[0]到hist[255]。
整個(gè)hist[i]則表示灰度值

print(hist[175],hist[255])
[3181.] [467.]
通過直方圖可看出輸出的結(jié)果就是每一個(gè)灰度值對應(yīng)的像素?cái)?shù)目
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
networkx庫繪制帶權(quán)圖給無權(quán)圖加權(quán)重輸出
這篇文章主要為大家介紹了Python?networkx庫繪制帶權(quán)圖給無權(quán)圖加權(quán)重并輸出權(quán)重的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
Python常見數(shù)據(jù)結(jié)構(gòu)之棧與隊(duì)列用法示例
這篇文章主要介紹了Python常見數(shù)據(jù)結(jié)構(gòu)之棧與隊(duì)列用法,結(jié)合實(shí)例形式簡單介紹了數(shù)據(jù)結(jié)構(gòu)中棧與隊(duì)列的概念、功能及簡單使用技巧,需要的朋友可以參考下2019-01-01
Python實(shí)現(xiàn)讀取文本文件并轉(zhuǎn)換為pdf
這篇文章主要為大家詳細(xì)介紹了如何使用Python簡便快捷地完成TXT文件到PDF文檔的轉(zhuǎn)換,滿足多樣化的文檔處理需求,感興趣的小伙伴可以參考下2024-04-04
Python爬蟲的兩套解析方法和四種爬蟲實(shí)現(xiàn)過程
本文想針對某一網(wǎng)頁對 python 基礎(chǔ)爬蟲的兩大解析庫( BeautifulSoup 和 lxml )和幾種信息提取實(shí)現(xiàn)方法進(jìn)行分析,及同一網(wǎng)頁爬蟲的四種實(shí)現(xiàn)方式,需要的朋友參考下吧2018-07-07
Python編程批量實(shí)現(xiàn)md5加密pdf文件
這篇文章主要介紹了Python編程批量實(shí)現(xiàn)md5加密pdf文件,文章基于python的相關(guān)資料展開詳細(xì)內(nèi)容介紹,具有一定的參考價(jià)值需要的小伙伴可以參考一下2022-04-04
調(diào)試Python程序代碼的幾種方法總結(jié)
這篇文章主要介紹了調(diào)試Python程序代碼的幾種方法總結(jié),文中代碼基于Python2.x版本,需要的朋友可以參考下2015-04-04
Python實(shí)現(xiàn)http服務(wù)器(http.server模塊傳參?接收參數(shù))實(shí)例
這篇文章主要為大家介紹了Python實(shí)現(xiàn)http服務(wù)器(http.server模塊傳參?接收參數(shù))實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11
Python實(shí)現(xiàn)文件按照日期命名的方法
這篇文章主要介紹了Python實(shí)現(xiàn)文件按照日期命名的方法,涉及Python針對文件的遍歷、讀寫及時(shí)間操作相關(guān)技巧,需要的朋友可以參考下2015-07-07

