python-opencv繪製圖片直方圖

在繪製直方圖時,將灰度級作爲x軸,該灰度級出現的次數作爲y軸.

直方圖繪製

在OpenCV的官網上,特別提出了要注意的三個概念:DIMS,BINS,RANGE.DIMS:表示在繪製直方圖時參數的數量,通常該值爲1,只是灰度級一種. RANGE:表示灰度級的範圍,一般是0到255. BINS:參數子集的數量,如果BINS爲16,就是將整個灰度級範圍分爲16組.
Python的matplotlib.pyplot中的hist函數能夠很方便的繪製直方圖,OpenCV的cv2.calcHist函數能計算統計直方圖

使用matplotlib.pyplot.hist繪製

matplotlib.pyplot.hist(X,BINS) 能夠繪製直方圖,X是一維數據源,通常讀入圖片後需要用ravel函數將二維數組降爲一維

import cv2
import  matplotlib.pyplot as plt
img=cv2.imread("1.jpg")
plt.hist(img.ravel(),256)
plt.show()


效果:
在這裏插入圖片描述

使用cv2.calaHist繪製

**cv2.calcHist(images,channels,mask,histSize,ranges,accumulate)**會返回一個統計直方圖,是一個一位數組.
所有參數都要用[]括起來
images是原始圖像.channel是通道,如果是單通道灰度圖就是0 彩色圖像中012對應bgr.mask是掩模圖像,在計算圖像的某一部分直方圖時需要,計算整幅圖時爲none.histSize是BINS的值,ranges是像素範圍.accumulate默認爲false,爲true時會累加直方圖的結果.

import cv2
import  matplotlib.pyplot as plt
img=cv2.imread("1.jpg")
hist=cv2.calcHist([img],[0],None,[256],[0,255])
plt.plot(hist)
plt.show()
print(hist)

效果:
在這裏插入圖片描述

歸一化直方圖

如果是要畫歸一化直方圖,就用算出來的統計值除以整個圖片的像素點:

hist=hist/(img.shape[0]*img.shape[1])
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章