乐趣区

关于图像处理:图像匹配大图中找小图最简单方法aircv之findtemplate

我的开源我的项目 SimpleRPA 外面,始终应用 aircv 的 find_template 办法来做图像匹配,最常见的场景就是从屏幕截图中,查找事后截好的小图,来确定下一步鼠标点击的地位:

比方在上面的钉钉 PC 端主页面中:

咱们来查找企业 logo 的地位:

aircv 是网易保护的一个小我的项目,外面有几个图像处理工具函数,它的装置很简略:

pip install aircv

其中被应用最多的,就是这个 find_template 办法,根本用法如下:

import aircv as ac

match_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':[            #二位数组,示意辨认后果的矩形四个角
        [left, top],
        [left, bottom],
        [right, top],
        [right, bottom]
    ],
    'confidence': percentage   #辨认后果的置信度, 在 0 - 1 之间,越大越精准
}

这样咱们就能够用返回值在图片上标出矩形框的地位:

import cv2
rect = 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,也没人理,还是有一些坑的,当前再缓缓聊。

退出移动版