摘要:理論可以將直方圖視為圖形或繪圖,它可以從中全面了解圖像的強(qiáng)度分布它是在軸上具有像素值范圍從到,并非總是的圖和在軸上的圖像中的對(duì)應(yīng)像素?cái)?shù)查找直方圖像素值區(qū)間的像素?cái)?shù)例如將整個(gè)直方圖分成個(gè)子部分,每個(gè)子部分的值是其中所有像素?cái)?shù)的總和,每個(gè)子部
Histograms - 1 : Find, Plot, Analyze !!!
理論可以將直方圖視為圖形或繪圖,它可以從中全面了解圖像的強(qiáng)度分布. 它是在X軸上具有像素值(范圍從0到255,并非總是)的圖和在Y軸上的圖像中的對(duì)應(yīng)像素?cái)?shù).
查找直方圖BINS:像素值區(qū)間的像素?cái)?shù).例如將整個(gè)直方圖分成16個(gè)子部分,每個(gè)子部分的值是其中所有像素?cái)?shù)的總和,每個(gè)子部分稱為“BIN”.
DIMS:收集數(shù)據(jù)的參數(shù)數(shù)量,在這種情況下,我們只收集有關(guān)一件事,強(qiáng)度值的數(shù)據(jù),所以這里是1.
RANGE :要測量的強(qiáng)度值范圍.通常,它是[0,256],即所有強(qiáng)度值.
1 OpenCV中的直方圖計(jì)算cv.calcHist(images,channels,mask,histSize,ranges [,hist [,accumulate]])
images:它是uint8或float32類型的源圖像。它應(yīng)該用方括號(hào)表示,即“[img]”;
channels:它也在方括號(hào)中給出.它是我們計(jì)算直方圖的通道索引.例如,如果輸入是灰度圖像,則其值為[0].對(duì)于彩色圖像,您可以通過[0],[1]或[2]分別計(jì)算藍(lán)色,綠色或紅色通道的直方圖.
mask:蒙版圖像.要查找完整圖像的直方圖,它將顯示為“無”.但是,如果要查找圖像特定區(qū)域的直方圖,則必須為其創(chuàng)建蒙版圖像并將其作為蒙版.
histSize:這代表我們的BIN計(jì)數(shù).需要在方括號(hào)中給出.對(duì)于滿量程,我們通過[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數(shù)組,每個(gè)值對(duì)應(yīng)于該圖像中具有相應(yīng)像素值的像素?cái)?shù)
2 Numpy中的直方圖計(jì)算hist,bins = np.histogram(img.ravel(),256,[0,256])
hist與我們之前計(jì)算的相同. 但是bins將有257個(gè)元素,因?yàn)镹umpy計(jì)算bins為0-0.99,1-1.99,2-2.99等.所以最終范圍是255-255.99. 為了表示這一點(diǎn),他們還在箱柜末尾添加256. 但我們不需要256.高達(dá)255就足夠了.
Numpy還有另一個(gè)函數(shù)np.bincount(),它比(大約10倍)np.histogram()快得多。 因此,對(duì)于一維直方圖,您可以更好地嘗試. 不要忘記在np.bincount中設(shè)置minlength = 256.
例如,hist = np.bincount(img.ravel(),minlength = 256)
Note:OpenCV函數(shù)比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的正常圖,這對(duì)BGR圖有好處.需要首先找到直方圖數(shù)據(jù).
代碼:
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()掩模的應(yīng)用
我們使用cv.calcHist()來查找完整圖像的直方圖. 如果要查找圖像某些區(qū)域的直方圖, 只需在要查找直方圖的區(qū)域上創(chuàng)建一個(gè)白色的蒙版圖像,否則創(chuàng)建黑色. 然后將其作為掩模傳遞.
代碼:
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()
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/42019.html
Histograms - 3 : 2D Histograms 我們已經(jīng)計(jì)算并繪制了一維直方圖,因?yàn)槲覀冎豢紤]一個(gè)特征,即像素的灰度強(qiáng)度值.但在二維直方圖中,需要考慮兩個(gè)特征,通常,它用于查找顏色直方圖,其中兩個(gè)要素是每個(gè)像素的色調(diào)和飽和度值. OpenCV中的2D直方圖 使用函數(shù)cv.calcHist(), 對(duì)于顏色直方圖,我們需要將圖像從BGR轉(zhuǎn)換為HSV。 (請記住,對(duì)于1D直方圖,我們從B...
摘要:如果噪音在那里,它就會(huì)被放大為了避免這種情況,會(huì)應(yīng)用對(duì)比限制如果任何直方圖超出指定的對(duì)比度限制默認(rèn)情況下是,在應(yīng)用直方圖均衡之前,這些像素被裁剪并均勻地分布到其他均衡后,刪除邊界中的工件,采用雙線性插值代碼 Histograms - 2: Histogram Equalization 直方圖均衡化是圖像處理領(lǐng)域中利用圖像直方圖對(duì)對(duì)比度進(jìn)行調(diào)整的方法.通過這種方法,亮度可以更好地在直方...
摘要:理論直方圖反向投影用于圖像分割或查找圖像中感興趣的對(duì)象簡單來說,它會(huì)創(chuàng)建一個(gè)與輸入圖像大小相同單個(gè)通道的圖像其中每個(gè)像素對(duì)應(yīng)于屬于我們對(duì)象該像素的概率輸出圖像將使我們感興趣的對(duì)象比其余部分更明顯首先,我們創(chuàng)建一個(gè)包含我們感興趣對(duì)象的圖像的 Histogram - 4 : Histogram Backprojection 理論 直方圖反向投影用于圖像分割或查找圖像中感興趣的對(duì)象,簡單來...
閱讀 1848·2021-09-22 15:23
閱讀 3289·2021-09-04 16:45
閱讀 1919·2021-07-29 14:49
閱讀 2783·2019-08-30 15:44
閱讀 1531·2019-08-29 16:36
閱讀 1055·2019-08-29 11:03
閱讀 1524·2019-08-26 13:53
閱讀 517·2019-08-26 11:57