21
08

利用OpenCV完成模板匹配

OpenCV是一个基于BSD开源许可发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。主要提供C++接口,同时提供了Java、Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。


本次分享《利用Python开发图像识别测试框架》实验中的实现自动化测试框架,回顾本章节的前期分享,请点击

图像识别的基本思路

模板匹配的核心算法

模板匹配的代码实现

实现自动化测试框架



OpenCV是一个基于BSD开源许可发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。主要提供C++接口,同时提供了Java、Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。


在模板匹配方面,OpenCV也提供了完整的接口,相对于我们利用Python+Pillow库开发的原生算法,OpenCV实现了更加高效的匹配算法。在Python中要能够正常使用OpenCV,必须首先安装OpenCV的库文件。利用“pip install opencv-python”命令进行正常安装即可。


安装完成后,我们便可以利用OpenCV完成上一节当中的“find_image”方法完全相同的功能,其代码及备注如下:


def find_image(self, target):
    basefolder = os.path.abspath('.') + "\\source\\"    # 定义图像的默认目录
    ImageGrab.grab().save(basefolder + "screen.png")    # 保存屏幕截图
    source = cv.imread(basefolder + "screen.png")       # 打开屏幕截图
    template = cv.imread(basefolder + target)           # 打开模板图片
    # 调用openCV自带的matchTemplate方法进行模板匹配
    result = cv.matchTemplate(source, template, cv.TM_CCOEFF_NORMED)
    pos_start = cv.minMaxLoc(result)[3]     # 获取匹配成功后的起始坐标
    # 计算匹配对象的中心坐标X和Y
    x = int(pos_start[0]) + int(template.shape[1] / 2)
    y = int(pos_start[1]) + int(template.shape[0] / 2)
    # 根据匹配度返回坐标,如果匹配度小于95%,则返回无效坐标(-1,-1)
    similarity = cv.minMaxLoc(result)[1]
    if similarity < 0.95:
        return (-1, -1)
    else:
        return (x, y)


 

上述的find_image方法实现了与前一节中的find_image完全一样的模板匹配功能,一样的参数,一样的返回值。我们可以用上述代码替换掉原生代码,并集成到已经实现的测试框架中完成相同的功能。


此处不再赘述。


下期推送:利用Python开发Monkey测试脚本



为了答谢大家对蜗牛学院的支持,蜗牛学院将会定期对大家免费发放干货,敬请关注蜗牛学院的官方微信。


20190320_095757_834.jpg







版权所有,转载本站文章请注明出处:蜗牛学苑, https://www.woniuxy.cn/article/306