在我的开源项目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方法只返回最可信的结果之一,如果其中有多个模板图像sourceimage,而你想全部找到,那么就需要find_all_template函数,参数完全一样,只是返回值是一个match_result数组。不过这个库已经很久没有维护了。我向它提交了PR,但没有人回应。还是有一些坑,以后再说。
