一:直方圖反向投影的方法
二:二維直方圖的表示
(一)直接顯示
def hist2D_demo(image): hsv = cv.cvtColor(image,cv.COLOR_BGR2HSV) hist = cv.calcHist([image],[0,1],None,[289,286],[0,289,0,286]) cv.imshow("hist2D",hist)
(二)使用matplotlib
def hist2D_demo(image): hsv = cv.cvtColor(image,cv.COLOR_BGR2HSV) hist = cv.calcHist([image],[0,1],None,[289,286],[0,289,0,286]) plt.imshow(hist,interpolation="nearest") plt.title("2D Histogram") plt.show()
三:直方圖反向映射
calcHist方法參數可見:OpenCV---圖像直方圖
def back_projection_demo(): sample = cv.imread("./s2.png") target = cv.imread("./b.png") roi_hsv = cv.cvtColor(sample,cv.COLOR_BGR2HSV) tar_hsv = cv.cvtColor(target,cv.COLOR_BGR2HSV) cv.imshow("sample",sample) cv.imshow("target",target) roihist = cv.calcHist([roi_hsv], [0, 1], None, [324, 356], [0, 324, 0, 356]) #加紅部分越小,匹配越放松,匹配越全面,若是bsize值越大,則要求得越精細,越不易匹配,所以導致匹配出來的比較小 cv.normalize(roihist,roihist,0,255,cv.NORM_MINMAX) #規划到0-255之間 dst = cv.calcBackProject([tar_hsv],[0,1],roihist,[0,324,0,356],1) #直方圖反向投影 cv.imshow("back_projection_demo",dst)
roihist = cv.calcHist([roi_hsv], [0, 1], None, [32, 46], [0, 324, 0, 356]) #這是兩個通道,bsize變少了,但是他的匹配更加廣了(對於匹配的局限放寬了)
opencv 2 歸一化函數normalize詳解
1. 歸一化就是要把需要處理的數據經過處理后(通過某種算法)限制在你需要的一定范圍內。 歸一化函數cv2.normalize原型:normalize(src, dst[, alpha[, beta[, norm_type[, dtype[, mask]]]]]) -> dst src參數表示輸入數組。 dst參數表示輸出與src相同大小的數組,支持原地運算。 alpha參數表示range normalization模式的最小值。 beta參數表示range normalization模式的最大值,不用於norm normalization(范數歸一化)模式。 norm_type參數表示歸一化的類型。 norm_type參數可以有以下的取值: NORM_MINMAX:數組的數值被平移或縮放到一個指定的范圍,線性歸一化,一般較常用。 NORM_INF:歸一化數組的C-范數(絕對值的最大值)。 NORM_L1 :歸一化數組的L1-范數(絕對值的和)。 NORM_L2 :歸一化數組的(歐幾里德)L2-范數。
2.反向投影用於在輸入圖像(通常較大)中查找特定圖像(通常較小或者僅1個像素,以下將其稱為模板圖像)最匹配的點或者區域,也就是定位模板圖像出現在輸入圖像的位置。 函數cv2.calcBackProject用來計算直方圖反向投影。 函數原型:calcBackProject(images, channels, hist, ranges, scale[, dst]) -> dst images參數表示輸入圖像(是HSV圖像)。傳入時應該用中括號[ ]括起來。 channels參數表示用於計算反向投影的通道列表,通道數必須與直方圖維度相匹配。 hist參數表示輸入的模板圖像直方圖。 ranges參數表示直方圖中每個維度bin的取值范圍 (即每個維度有多少個bin)。 scale參數表示可選輸出反向投影的比例因子,一般取1。