直方圖口訣
左邊暗,右邊亮,越往右靠光越強(qiáng);
偏左偏右都不好,反差要低山中央;
兩邊高,中間小,光比很大細(xì)節(jié)少;
不冒頭,不斷檔,連綿起伏好風(fēng)光。
直方圖判斷曝光
左邊山腳見不到,暗部沒有細(xì)節(jié);
右邊山腳見不到,亮部沒有細(xì)節(jié);
兩邊山腳見不到,明暗均有失;
山峰靠右亮區(qū)大,山峰靠左暗影多;
山谷如果在中央,中間影調(diào)細(xì)節(jié)少。
(1) 什么是直方圖
直方圖可以讓你了解總體的圖像像素強(qiáng)度分布,其X軸為像素值(一般范圍為0~255),在Y軸上為圖像中具有該像素值像素?cái)?shù)。
直方圖的作用: 通過直方圖可以直觀地i奧杰圖像的對比度、亮度、強(qiáng)度分布等。
(2)尋找直方圖
幾個(gè)術(shù)語
BINS:直方圖的柱的個(gè)數(shù)稱為BINS,在OpenCV中表示為histSize
RANGE:測量的強(qiáng)度值的范圍,一般為[0,255]
OpenCV中的直方圖計(jì)算
使用cv2.calcHist(查找直方圖):
cv.calcHist(images,channels,mask,histSize,ranges [,hist [,accumulate]])
images:它是uint8或float32類型的源圖像。它應(yīng)該放在方括號(hào)中,即“ [img]”。
channels:也以方括號(hào)給出。它是我們計(jì)算直方圖的通道的索引。例如,如果輸入為灰度圖像,則其值為[0]。對于彩色圖像,您可以傳遞[0],[1]或[2]分別計(jì)算藍(lán)色,綠色或紅色通道的直方圖。、
mask:圖像掩碼。為了找到完整圖像的直方圖,將其指定為“無”。但是,如果要查找圖像特定區(qū)域的直方圖,則必須為此創(chuàng)建一個(gè)掩碼圖像并將其作為掩碼。(文章后面再說)
histSize:這表示我們的BIN計(jì)數(shù)。需要放在方括號(hào)中。對于全尺寸,我們通過[256]。
ranges:這是我們的RANGE。通常為[0,256]。
#讀取灰度圖 img = cv.imread('home.jpg',0) hist = cv.calcHist([img],[0],None,[256],[0,256])
hist是256x1的數(shù)組,每個(gè)值對應(yīng)于該圖像中具有相應(yīng)像素值的像素?cái)?shù)。
(3) 繪制直方圖
Matplotlib繪制直方圖
a.繪制灰度圖的直方圖使用plt.hist()可以直接找到直方圖并繪制,無需使用cv2.calsHist()函數(shù)
import cv2 as cv import matplotlib.pyplot as plt img = cv.imread('messi.png',0) plt.subplot(1,2,1);plt.imshow(img) plt.subplot(1,2,2);plt.hist(img.ravel(),256,[0,256]) plt.show()
b.繪制RGB圖的直方圖
import cv2 as cv import matplotlib.pyplot as plt img = cv.imread('apple.png') #BGR img1=img.copy() img1[:,:,2],img1[:,:,0] =img[:,:,0],img[:,:,2] #BGR->RGB plt.subplot(1,2,1);plt.imshow(img1) color=('b','g','r') plt.subplot(1,2,2) for i,col in enumerate(color): hist=cv.calcHist([img],[i],None,[256],[0,256]) #找到第i個(gè)通道的直方圖數(shù)據(jù) plt.plot(hist,color=col) plt.xlim([0,256]) plt.show()
聯(lián)系客服