摘要:理論可以將直方圖視為圖形或繪圖,它可以從中全面了解圖像的強度分布它是在軸上具有像素值范圍從到,并非總是的圖和在軸上的圖像中的對應像素數查找直方圖像素值區間的像素數例如將整個直方圖分成個子部分,每個子部分的值是其中所有像素數的總和,每個子部
Histograms - 1 : Find, Plot, Analyze !!!
理論可以將直方圖視為圖形或繪圖,它可以從中全面了解圖像的強度分布. 它是在X軸上具有像素值(范圍從0到255,并非總是)的圖和在Y軸上的圖像中的對應像素數.
查找直方圖BINS:像素值區間的像素數.例如將整個直方圖分成16個子部分,每個子部分的值是其中所有像素數的總和,每個子部分稱為“BIN”.
DIMS:收集數據的參數數量,在這種情況下,我們只收集有關一件事,強度值的數據,所以這里是1.
RANGE :要測量的強度值范圍.通常,它是[0,256],即所有強度值.
1 OpenCV中的直方圖計算cv.calcHist(images,channels,mask,histSize,ranges [,hist [,accumulate]])
images:它是uint8或float32類型的源圖像。它應該用方括號表示,即“[img]”;
channels:它也在方括號中給出.它是我們計算直方圖的通道索引.例如,如果輸入是灰度圖像,則其值為[0].對于彩色圖像,您可以通過[0],[1]或[2]分別計算藍色,綠色或紅色通道的直方圖.
mask:蒙版圖像.要查找完整圖像的直方圖,它將顯示為“無”.但是,如果要查找圖像特定區域的直方圖,則必須為其創建蒙版圖像并將其作為蒙版.
histSize:這代表我們的BIN計數.需要在方括號中給出.對于滿量程,我們通過[256].
ranges:這是我們的范圍。通常,它是[0,256].
代碼:
import cv2 import numpy as np img = cv2.imread("img.jpg") hist = cv2.calcHist([img],[0],None,[256],[0,256])
hist是256x1數組,每個值對應于該圖像中具有相應像素值的像素數
2 Numpy中的直方圖計算hist,bins = np.histogram(img.ravel(),256,[0,256])
hist與我們之前計算的相同. 但是bins將有257個元素,因為Numpy計算bins為0-0.99,1-1.99,2-2.99等.所以最終范圍是255-255.99. 為了表示這一點,他們還在箱柜末尾添加256. 但我們不需要256.高達255就足夠了.
Numpy還有另一個函數np.bincount(),它比(大約10倍)np.histogram()快得多。 因此,對于一維直方圖,您可以更好地嘗試. 不要忘記在np.bincount中設置minlength = 256.
例如,hist = np.bincount(img.ravel(),minlength = 256)
Note:OpenCV函數比np.histogram()快(大約40倍)
繪制直方圖 1 使用MatplotlibMatplotlib附帶直方圖繪圖功能:matplotlib.pyplot.hist()
import cv2 import numpy as np from matplotlib import pyplot as plt img = cv2.imread("img.jpg",0) plt.hist(img.ravel(),256,[0,256]) plt.show()
原圖:
直方圖:
或者可以使用matplotlib的正常圖,這對BGR圖有好處.需要首先找到直方圖數據.
代碼:
import cv2 import numpy as np from matplotlib import pyplot as plt img = cv2.imread("img.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]) plt.show()掩模的應用
我們使用cv.calcHist()來查找完整圖像的直方圖. 如果要查找圖像某些區域的直方圖, 只需在要查找直方圖的區域上創建一個白色的蒙版圖像,否則創建黑色. 然后將其作為掩模傳遞.
代碼:
import cv2 import numpy as np from matplotlib import pyplot as plt img = cv2.imread("img.jpg",0) # create a mask mask = np.zeros(img.shape[:2], np.uint8) mask[100:300, 100:400] = 255 masked_img = cv2.bitwise_and(img,img,mask = mask) # Calculate histogram with mask and without mask # Check third argument for mask hist_full = cv2.calcHist([img],[0],None,[256],[0,256]) hist_mask = cv2.calcHist([img],[0],mask,[256],[0,256]) plt.subplot(221), plt.imshow(img, "gray") plt.subplot(222), plt.imshow(mask,"gray") plt.subplot(223), plt.imshow(masked_img, "gray") plt.subplot(224), plt.plot(hist_full), plt.plot(hist_mask) plt.xlim([0,256]) plt.show()
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/42019.html
Histograms - 3 : 2D Histograms 我們已經計算并繪制了一維直方圖,因為我們只考慮一個特征,即像素的灰度強度值.但在二維直方圖中,需要考慮兩個特征,通常,它用于查找顏色直方圖,其中兩個要素是每個像素的色調和飽和度值. OpenCV中的2D直方圖 使用函數cv.calcHist(), 對于顏色直方圖,我們需要將圖像從BGR轉換為HSV。 (請記住,對于1D直方圖,我們從B...
摘要:如果噪音在那里,它就會被放大為了避免這種情況,會應用對比限制如果任何直方圖超出指定的對比度限制默認情況下是,在應用直方圖均衡之前,這些像素被裁剪并均勻地分布到其他均衡后,刪除邊界中的工件,采用雙線性插值代碼 Histograms - 2: Histogram Equalization 直方圖均衡化是圖像處理領域中利用圖像直方圖對對比度進行調整的方法.通過這種方法,亮度可以更好地在直方...
摘要:理論直方圖反向投影用于圖像分割或查找圖像中感興趣的對象簡單來說,它會創建一個與輸入圖像大小相同單個通道的圖像其中每個像素對應于屬于我們對象該像素的概率輸出圖像將使我們感興趣的對象比其余部分更明顯首先,我們創建一個包含我們感興趣對象的圖像的 Histogram - 4 : Histogram Backprojection 理論 直方圖反向投影用于圖像分割或查找圖像中感興趣的對象,簡單來...
閱讀 1833·2021-09-22 15:23
閱讀 3255·2021-09-04 16:45
閱讀 1842·2021-07-29 14:49
閱讀 2767·2019-08-30 15:44
閱讀 1523·2019-08-29 16:36
閱讀 1038·2019-08-29 11:03
閱讀 1504·2019-08-26 13:53
閱讀 504·2019-08-26 11:57