在我的开源项目SimpleRPA中,一直使用aircv的find_template方法进行图片匹配。截取小图来判断下一次鼠标点击的位置:比如下面钉钉PC主页面中:我们找公司logo的位置:aircv是网易维护的一个小项目,里面包含了几个图像处理工具的功能,它的安装很简单:pipinstallaircv是用的最多的方法,也就是find_template方法。基本用法如下:importaircvasacmatch_result=ac.find_template(image_origin,image_template,threshold,bgremove)几个参数代表image_origin:要搜索的源图片(上例钉钉主页截图),注意源图的宽高必须大于等于模板图image_template:要搜索的小模板图(上例中的logo)threshold:最小置信度,在0到1之间。因为图像匹配做不要求每个像素完全一样,可以模糊匹配,所以设置的值越大,找到的区域越接近模板图像,但是如果设置的太高,可能会找不到。bgremove:是否去除背景。如果这个值设置为True,那么函数内部会使用Canny算子先提取图像轮廓,然后再进行搜索。返回值match_result是一个dict结构:match_result:{'result':(x,y),#tuple,表示识别结果中心点'rectangle':[#一个两位数组,代表矩形的四个角oftherecognitionresult[left,top],[left,bottom],[right,top],[right,bottom]],'confidence':percentage#识别结果的置信度,0-1之间,越大越多accurate}所以我们可以使用返回值来标记矩形在图片上的位置:importcv2rect=match_result['rectangle']cv2.rectangle(img_result,(rect[0][0],rect[0][1]),(rect[3][0],rect[3][1]),(0,0,220),2)这个find_template方法只返回最可信的结果。如果源图片中有多个模板图片,想要全部找到,需要find_all_template函数。参数完全一样,只是返回值是一个match_result数组。不过这个库已经很久没有维护了。我向它提交了PR,但没有人回应。还是有一些坑,以后再说。
