基于OpenCV的AndroidSDK实现的特征点匹配案例,其中SDK的版本为4.5.5
SDK下载
OpenCV的SDK这里下载。
matchTemplate方案的试错
自己一个项目需要使用图像匹配,其实就是从一个大截图中截出来一个小按钮,然后去识别这个按钮的位置然后做点击。一开始使用的是模板匹配,也就是Imgproc._matchTemplate()_
方法,但使用后发现该方法对图片的分辨率要求过高(其实还有旋转、角度等限制),即时是从大图中截图出来的小图,也是需要分辨率对得上才能匹配成功(也就是说不同分辨率的手机截图出来的文件不一定能匹配成功)。
决定使用drawMatches
后来找了好久的资料,终于在OpenCV的官网文档找到一个基于特征点匹配的方法(Features2d._drawMatches()_
),不受限分辨率、角度、旋转等限制(虽然我这个项目不涉及到角度和旋转)。
要注意的是这个方法可以使用好几种不同的算法(BRISK、ORB、KAZE、AKAZE、MSER等),这里我最终选用的是BRISK,关于这几种算法的优劣可以百度,我是参考了链接。
代码实现
// image2Bitmap:截图出来的Bitmap对象
// templateBitmap:要匹配的按钮的Bitmap对象
// src:截图的Mat对象
// template:要匹配的按钮的Mat对象
if (image2Bitmap != null) {
LogUtils.d("截图完成,准备匹配截图");
src = new Mat()