-
1 # 用戶7411191690278
-
2 # 用戶5435842789945
直方圖口訣
左邊暗,右邊亮,越往右靠光越強;
偏左偏右都不好,反差要低山中央;
兩邊高,中間小,光比很大細節少;
不冒頭,不斷檔,連綿起伏好風光。
直方圖判斷曝光
左邊山腳見不到,暗部沒有細節;
右邊山腳見不到,亮部沒有細節;
兩邊山腳見不到,明暗均有失;
山峰靠右亮區大,山峰靠左暗影多;
山谷如果在中央,中間影調細節少。
(1) 什麼是直方圖
直方圖可以讓你了解總體的圖像像素強度分布,其X軸為像素值(一般範圍為0~255),在Y軸上為圖像中具有該像素值像素數。
直方圖的作用: 通過直方圖可以直觀地i奧傑圖像的對比度、亮度、強度分布等。
(2)尋找直方圖
幾個術語
BINS:直方圖的柱的個數稱為BINS,在OpenCV中表示為histSize
RANGE:測量的強度值的範圍,一般為[0,255]
OpenCV中的直方圖計算
使用cv2.calcHist(查找直方圖):
cv.calcHist(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 = cv.calcHist([img],[0],None,[256],[0,256])
hist是256x1的數組,每個值對應於該圖像中具有相應像素值的像素數。
(3) 繪製直方圖
Matplotlib繪製直方圖
a.繪製灰度圖的直方圖使用plt.hist()可以直接找到直方圖並繪製,無需使用cv2.calsHist()函數
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個通道的直方圖數據 plt.plot(hist,color=col) plt.xlim([0,256]) plt.show()
回覆列表
沒有確切的口訣標準,但可以用以下方式來記憶直方圖法的4種類型:
1. 高低比較,從左往右,
比較高低,找極值。
山峰、山谷,都要記,
主次辨別,得出結論。
2. 上升或下降,有趨勢,
增減趨勢,需留心。
是否平穩,可推考,
趨勢有助,觀察深。
3. 分布集中,中間高,
兩邊低,形態識。
是否對稱,頂尖點,
左右相同,為合格。
4. 左右偏斜,中線移,
兩邊拉長,效應大。
偏斜的方向,研判中,
有目的學,得心幫。