我试图通过沿着图像移动模板来匹配模板与二进制图像(仅黑色和白色).并返回模板和图像之间的最小距离,以及发生此最小距离的相应位置.例如:
IMG:
0 1 0
0 0 1
0 1 1
模板:
0 1
1 1
这个模板匹配位置(1,1)处的最佳图像,然后距离将为0.到目前为止,事情并不太困难,我已经有了一些代码来完成这个技巧.
def match_template(img, template):
mindist = float('inf')
idx = (-1,-1)
for y in xrange(img.shape[1]-template.shape[1]+1):
for x in xrange(img.shape[0]-template.shape[0]+1):
#calculate Euclidean distance
dist = np.sqrt(np.sum(np.square(template - img[x:x+template.shape[0],y:y+template.shape[1]])))
if dist < mindist:
mindist = dist
idx = (x,y)
return [mindist, idx]
但对于我需要的尺寸的图像(500 x 200像素和250 x 100之间的模板)这已经花了大约4.5秒,这太慢了.而且我知道使用矩阵乘法可以更快地完成同样的事情(在matlab中我相信这可以使用im2col和repmat完成).任何人都可以解释我如何在python / numpy中做到这一点?
顺便说一句.我知道有一个opencv matc