直方圖口訣
左邊暗,右邊亮,越往右靠光越強
偏左偏右都不好,反差要低山中央
兩邊高,中間小,光比很大細節少
不冒頭,不斷檔,連綿起伏好風光。
直方圖判斷曝光
左邊山腳見不到,暗部沒有細節
右邊山腳見不到,亮部沒有細節
兩邊山腳見不到,明暗均有失
山峯靠右亮區大,山峯靠左暗影多
山谷如果在中央,中間影調細節少。
(1) 什麼是直方圖
直方圖可以讓你瞭解總體的圖像像素強度分佈,其X軸為像素值(一般範圍為0~255),在Y軸上為圖像中具有該像素值像素數。
直方圖的作用: 通過直方圖可以直觀地i奧傑圖像的對比度、亮度、強度分佈等。
(2)尋找直方圖
幾個術語
BINS:直方圖的柱的個數稱為BINS,在OpenCV中表示為histSize
RANGE:測量的強度值的範圍,一般為[0,255]
OpenCV中的直方圖計算
使用Hist(查找直方圖):
Hist(images,channels,mask,histSize,ranges [,hist [,accumulate]])
images:它是uint8或float32類型的源圖像。它應該放在方括號中,即“ [img]”。
channels:也以方括號給出。它是我們計算直方圖的通道的索引。例如,如果輸入為灰度圖像,則其值為[0]。對於彩色圖像,您可以傳遞[0],[1]或[2]分別計算藍色,綠色或紅色通道的直方圖。、
mask:圖像掩碼。為了找到完整圖像的直方圖,將其指定為“無”。但是,如果要查找圖像特定區域的直方圖,則必須為此創建一個掩碼圖像並將其作為掩碼。(文章後面再説)
histSize:這表示我們的BIN計數。需要放在方括號中。對於全尺寸,我們通過[256]。
ranges:這是我們的RANGE。通常為[0,256]。
#讀取灰度圖 img = cv.imread('home.jpg',0) hist = Hist([img],[0],None,[256],[0,256])
hist是256x1的數組,每個值對應於該圖像中具有相應像素值的像素數。
(3) 繪製直方圖
Matplotlib繪製直方圖
a.繪製灰度圖的直方圖使用()可以直接找到直方圖並繪製,無需使用Hist()函數
import cv2 as cv import ot as plt img = cv.imread('messi.png',0) lot(1,2,1)ow(img) lot(1,2,2)(l(),256,[0,256]) ()
b.繪製RGB圖的直方圖
import cv2 as cv import ot as plt img = cv.imread('apple.png') #BGR img1=() img1[:,:,2],img1[:,:,0] =img[:,:,0],img[:,:,2] #BGR->RGB lot(1,2,1)ow(img1) color=('b','g','r') lot(1,2,2) for i,col in enumerate(color): hist=Hist([img],[i],None,[256],[0,256]) #找到第i個通道的直方圖數據 (hist,color=col) ([0,256]) ()