
2.2.1 模板匹配算法
图像的表示单元是像素。像素的描述形式有很多,常用的是RGB三通道描述方式。根据像素的各个通道的灰度值,可以对游戏图像进行一系列处理。图2-3是基于模板匹配算法的图像识别。模板匹配的思想是在一幅图像中寻找与模板图像最匹配的部分。

图2-3 模板匹配的过程
Step1:从原图像的左上角开始,从左向右、从上到下,步长为1,采用滑动窗口的方式,依次计算模板图像和窗口子图像的相似度。
Step2:把相似结果存储在结果矩阵中。
Step3:最终在结果矩阵中找到最佳匹配值。相似度越高,则最佳匹配值越大,结果矩阵中对应部分越亮。
OpenCV中提供了接口函数cv2.matchTemplate(src,tmpl,method)进行模板匹配,其中method表示选择的匹配方法。可用的方法包括如下几种。
(1)平方差匹配
CV_TM_SQDIFF:最好的匹配对应的匹配值为0。匹配越差,匹配值越大。

(2)标准平方差匹配
CV_TM_SQDIFF_NORMED:最好的匹配对应的匹配值为0。匹配越差,匹配值越大。

(3)相关匹配
CV_TM_CCORR:值越大,表示匹配程度越高。0表示最差的匹配效果。

(4)标准相关匹配
CV_TM_CCORR_NORMED:值越大,表示匹配程度越高。0表示最差的匹配效果。

(5)相关匹配
CV_TM_CCOEFF:1表示完美匹配,-1表示糟糕的匹配,0表示没有任何相关性。

(6)标准相关匹配
CV_TM_CCOEFF_NORMED:1表示完美匹配,-1表示糟糕的匹配,0表示没有任何相关性。

基于像素值的方案是对相同位置的两张图像的像素值进行匹配,要求在相同检测位置的像素值大小要相等或相近。但是在实际测试过程中,因为异形屏、手机分辨率、刘海屏或Bug调试界面的不同,会导致图像的大小和UI差异比较大,模板匹配算法很难适配这种情况。基于特征点的方案可以解决这些问题。