OpenCV學習筆記 形狀匹配

2021-08-20 07:23:24 字數 1579 閱讀 4579

函式cv.matchshape()可以幫我們比較兩個形狀或輪廓的相似度。如果返回值越小,匹配越好。

它是根據hu矩來計算的。hu矩是歸一化中心矩的線性組合,之所以這樣做是為了能夠獲取代表影象的某個特徵的矩函式。這些矩函式對某些變化如縮放,旋轉,映象對映(除了h1)具有不變形。

具體**:

defmatchshape_demo():

#性狀匹配

img1 = cv.imread('img/contour_target.png')

img2 = cv.imread('img/contours1.png')

gray1 = cv.cvtcolor(img1, cv.color_bgr2gray)

ret, thresh1 = cv.threshold(gray1, 0, 255, cv.thresh_binary_inv | cv.thresh_otsu)

cv.imshow('thresh1', thresh1)

gray2 = cv.cvtcolor(img2, cv.color_bgr2gray)

ret, thresh2 = cv.threshold(gray2, 0, 255, cv.thresh_binary_inv | cv.thresh_otsu)

cv.imshow('thresh2', thresh2)

cnt1 = contours1[0]

fori, cntinenumerate(contours2):

print(i)

#找到性狀的重心

m = cv.moments(cnt)

cx = int(m['m10']/m['m00'])

cy = int(m['m01']/m['m00'])

print(cx, cy)

cv.circle(img2, (cx, cy), 5, (255,255,255), -1)

#性狀匹配

ret = cv.matchshapes(cnt1, cnt, 1, 0.0)

print(ret)

cv.imshow('img'+str(i), gray2)

結果:

上面是我們匹配的影象,0

650 156

0.2982116195106314 1

370 147

0.3064981073672026 2

119 134

1.7208456881689926e-15

從結果我們可以看出來,

匹配是從右往左進行的,這一點我專門加了重心座標才看出來。

OpenCV學習筆記(十三) 模板匹配

所謂模板匹配就是在一幅影象中尋找和模板影象 patch 最相似的區域。該函式的功能為,在輸入源影象source image i 中滑動框,尋找各個位置與模板影象template image t 的相似度,並將結果儲存在結果矩陣result matrix r 中。該矩陣的每乙個點的亮度表示與模板t的匹...

opencv學習筆記二十 模板匹配

模板匹配就是拿模板去遍歷影象,在遍歷的每個位置計算結果,即匹配程度,opencv中 提供了 6 種計算方法 差值平方和匹配 cv tm sqdiff 標準化差值平方和匹配 cv tm sqdiff normed 相關匹配 cv tm ccorr 標準相關匹配 cv tm ccorr normed 相...

Opencv 學習筆記(六)模板匹配

菜鳥一枚,這是我的第六個部落格,剛剛入門opencv,想將自己的學習過程分享給大家!include stdafx.h include include opencv highgui 模組 include opencv 影象處理標頭檔案 using namespace cv define window ...