aircv是网易发布的一个开源小项目,应该是简单图片匹配被引用次数最多的项目。上一篇介绍了如何使用aircv的find_template。不过不是一个成熟的项目,里面有很多小坑,有待完善。今天就来对代码进行一下逻辑分析。核心函数find_template和find_all_templatefind_template函数返回第一个最匹配的结果(位置可能不在最前面),find_all_template返回所有大于指定置信度的结果。比如想查找thinking页面截图中的结果,如下图所示:我们进去看代码,会发现find_template是这样写的:deffind_template(im_source,im_search,threshold=0.5,rgb=False,bgremove=False):'''@returnfindlocation如果没找到;returnNone'''result=find_all_template(im_source,im_search,threshold,1,rgb,bgremove)returnresult[0]ifresultelseNone好家伙!直接调用find_all_template,然后取返回值的第一个。..所以find_all_template才是真正的核心,我们先排除无关代码,再来看最关键的部分:deffind_all_template(im_source,im_search,threshold=0.5,maxcnt=0,rgb=False,bgremove=False):#匹配算法,其实aircv在代码里写了CCOEFF_NORMED,大部分测试结果用这个算法确实更好method=cv2.TM_CCOEFF_NORMED#得到匹配矩阵res=cv2.matchTemplate(im_source,im_search,method)w,h=im_search.shape[1],im_search.shape[0]result=[]whileTrue:#求匹配的最大值和最小值min_val,max_val,min_loc,max_loc=cv2.minMaxLoc(res)top_left=max_locifmax_val
