Opencv中的cv2.calcHist()函數(shù)的作用及返回值說(shuō)明
在討論其返回值前,我們先來(lái)介紹以下calcHist()函數(shù)的用法:
cv2.calcHist()函數(shù)
cv2.calcHist()函數(shù)的作用
通過(guò)直方圖可以很好的對(duì)整幅圖像的灰度分布有一個(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) 用中括號(hào) [] 括來(lái)例如[img]channels
: 同樣用中括號(hào)括來(lái)它會(huì)告函數(shù)我們統(tǒng)幅圖 像的直方圖。如果入圖像是灰度圖它的值就是 [0]如果是彩色 圖像 的傳入的參數(shù)可以是 [0][1][2] 它們分別對(duì)應(yīng)著 BGR。mask
: 掩模圖像。統(tǒng)整幅圖像的直方圖就把它為 None。但是如果你想統(tǒng)圖像某一分的直方圖的你就制作一個(gè)掩模圖像并使用它。histSize
:BIN 的數(shù)目。也應(yīng)用中括號(hào)括來(lái)BINS
: 上面的直方圖顯示了每個(gè)像素值的像素?cái)?shù),即從0到255。即您需要256個(gè)值才能顯示上述直方圖。但是請(qǐng)考慮一下,如果您不需要單獨(dú)查找所有像素值的像素?cái)?shù),而是在像素值間隔內(nèi)查找像素?cái)?shù),該怎么辦?例如,您需要找到介于 0 到 15 之間的像素?cái)?shù),然后是 16 到 31、...、240 到 255。您只需要 16 個(gè)值來(lái)表示直方圖。- 因此,只需將整個(gè)直方圖拆分為 16 個(gè)子部分,每個(gè)子部分的值就是其中所有像素計(jì)數(shù)的總和。這每個(gè)子部分都稱(chēng)為"BIN"。在第一種情況下,條柱數(shù)為256(每個(gè)像素一個(gè)),而在第二種情況下,它只有16。BINS 在 OpenCV 文檔中由術(shù)語(yǔ)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é)果:
到這里完整的直方圖就這樣子繪制出來(lái)了,但是大家也許會(huì)對(duì)calcHist的返回值有疑問(wèn),到底返回了什么才能畫(huà)出來(lái)這樣的圖像呢?下面我們則來(lái)討論該函數(shù)的返回值
cv2.calcHist()函數(shù)的返回值
對(duì)于hist = cv2.calcHist([img],[0],None,[256],[0,256])中,hist是一個(gè)256*1的矩陣,每一個(gè)值代表了每個(gè)灰度值對(duì)應(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.]
通過(guò)直方圖可看出輸出的結(jié)果就是每一個(gè)灰度值對(duì)應(yīng)的像素?cái)?shù)目
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python 基于selenium實(shí)現(xiàn)鼠標(biāo)拖拽功能
這篇文章主要介紹了python 基于selenium實(shí)現(xiàn)鼠標(biāo)拖拽功能的方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2020-12-12python中字符串變二維數(shù)組的實(shí)例講解
下面小編就為大家分享一篇python中字符串變二維數(shù)組的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-04-04PyAutoGUI圖形用戶(hù)界面自動(dòng)化的超詳細(xì)教程
PyautoGUI是一個(gè)純Python的自動(dòng)化工具,能實(shí)現(xiàn)用程序自動(dòng)控制鼠標(biāo)和鍵盤(pán)操作,下面這篇文章主要給大家介紹了關(guān)于PyAutoGUI圖形用戶(hù)界面自動(dòng)化的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04Python用requests模塊實(shí)現(xiàn)動(dòng)態(tài)網(wǎng)頁(yè)爬蟲(chóng)
大家好,本篇文章主要講的是Python用requests模塊實(shí)現(xiàn)動(dòng)態(tài)網(wǎng)頁(yè)爬蟲(chóng),感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話(huà)記得收藏一下2022-02-02Python爬蟲(chóng)+Tkinter制作一個(gè)翻譯軟件的示例
這篇文章主要介紹了Python爬蟲(chóng)+Tkinter制作一個(gè)翻譯軟件的示例,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下2021-02-02PyQt5+QtChart實(shí)現(xiàn)繪制極坐標(biāo)圖
QChart是一個(gè)QGraphicScene中可以顯示的QGraphicsWidget。本文將利用QtChart實(shí)現(xiàn)極坐標(biāo)圖的繪制,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-12-12python實(shí)現(xiàn)盲盒抽獎(jiǎng)功能(減庫(kù)存)
本文主要介紹了python實(shí)現(xiàn)盲盒抽獎(jiǎng)功能,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09