模板匹配和卷積原理很像,模板在原影象上從原點開始滑動,計算模板與(影象被模板覆蓋的地方)的差別程度,這個差別程度的計算方法在opencv裡有6種,然後將每次計算的結果放入乙個矩陣裡,作為結果輸出。假如原圖形是axb大小,而模板是axb大小,則輸出結果的矩陣是(a-a+1)x(b-b+1)
tm_sqdiff_normed:計算歸一化平方不同,計算出來的值越接近0,越相關
tm_ccorr_normed:計算歸一化相關性,計算出來的值越接近1,越相關
tm_ccoeff_normed:計算歸一化相關係數,計算出來的值越接近1,越相關
公式:
#效果:模板匹配
(263, 263)(110, 85)
res = cv2.matchtemplate(img, template, cv2.tm_sqdiff) #效果:也可以寫數字
res.shape
(154, 179)
min_val, max_val, min_loc, max_loc = cv2.minmaxloc(res) #效果:最大值、最小值、最大值座標、最小值座標
min_val
max_val
min_loc
max_loc
39168.074403584.0(107, 89)
(159, 62)
for meth in效果:methods:
img2 =img.copy()
#匹配方法的真值
method =eval(meth)
#print (method)
res =cv2.matchtemplate(img, template, method)
min_val, max_val, min_loc, max_loc =cv2.minmaxloc(res)
#如果是平方差匹配tm_sqdiff或歸一化平方差匹配tm_sqdiff_normed,取最小值
if method in
[cv2.tm_sqdiff, cv2.tm_sqdiff_normed]:
top_left =min_loc
else
: top_left =max_loc
bottom_right = (top_left[0] + w, top_left[1] +h)
#畫矩形
cv2.rectangle(img2, top_left, bottom_right, 255, 2)
plt.subplot(121), plt.imshow(res, cmap='
gray')
plt.xticks(), plt.yticks()
#隱藏座標軸
plt.subplot(122), plt.imshow(img2, cmap='
gray')
plt.xticks(), plt.yticks()
plt.suptitle(meth)
plt.show()
#取匹配程度大於%80的座標
loc = np.where(res >=threshold)
for pt in zip(*loc[::-1]): #
*號表示可選引數
bottom_right = (pt[0] + w, pt[1] +h)
cv2.rectangle(img_rgb, pt, bottom_right, (0, 0, 255), 1)
cv2.imshow(
'img_rgb
', img_rgb)
cv2.waitkey(0)
效果:
OpenCV模板匹配
include include opencv2 opencv.hpp using namespace std using namespace cv int main int argc,char argv load reference image img imread argv 1 always ch...
opencv模板匹配
模板匹配是一種用於在源影象s中尋找定位給定目標影象t 即模板影象 的技術。其原理很簡單,就是通過一些相似度準則來衡量兩個影象塊之間的相似度similarity s,t 2.用途 模板匹配方法常用於一些平面影象處理中,例如印刷中的數字 工業零器件等小尺寸目標影象識別分類。3.方法 模板匹配中,源影象和...
模板匹配opencv
模板匹配,就是在一幅影象中尋找另一幅模板影象最匹配 也就是最相似 的部分的技術。說的有點抽象,下面給個例子說明就很明白了。在上面這幅全明星照中,我們想找出姚明頭像的位置,並把它標記出來,可以做到嗎?可以,這就是模板匹配的要做的事情。其實模板匹配實現的思想也是很簡單很暴力的,就是拿著模板 姚明頭像 在...