Android修行手册 - 模板匹配函数matchTemplate详解,从N张图片中找到是否包含五星

  • 点击跳转=>Unity3D特效百例
  • 点击跳转=>案例项目实战源码
  • 点击跳转=>游戏脚本-辅助自动化
  • 点击跳转=>Android控件全解手册
  • 点击跳转=>Scratch编程案例
  • 点击跳转=>软考全系列

👉关于作者

专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)
有什么需要欢迎底部卡片私我,交流让学习不再孤单

在这里插入图片描述

👉实践过程

😜啥是模板匹配

OpenCV中的模板匹配功能是用于在较大图像中搜索和查找模板图像位置的函数。OpenCV提供matchTemplate()方法来实现模板匹配功能。模板匹配结果返回的是灰度图像,其中每个像素表示该像素的邻域与模板匹配程度。假设输入图像的大小(W * H),模板图像的大小为(w * h),则输出图像的大小将为(W - w + 1,H - h + 1)。获得结果后,可以使用minMaxLoc()方法查找最大/最小值位置,并将其作为矩形的左上角,以(w,h)作为矩形的宽度和高度来确定模板匹配到的区域。

但是要注意了,该功能会将相似的也识别出来,因为他返回的是最相近值(变动的),而不是一个肯定值。也就是你没法用一个临界值来判断到底是不是包含真正你想要找的。

比如有这样一个应用场景,从多款手机不同位置进行了星级评分操作,然后进行截图保存。
想要从这么多照片自动化处理判断是否为五星评分。
那么你就需要准备一个五星的模板图片,并且尽量仅包含五星内容。然后利用OpenCV的方法进行查找匹配。
理想状态下是找到并且刚好找到那个位置。但是因为手机分辨率的不同,屏幕截图内容的差异性,会造成OpenCV只能做到识别最相似的。如有张图片是四星,刚好旁边有个和星类似颜色的内容,这块区域就会识别成最相似内容并返回。但这根本没法实现自动给他评定是否为五星。

那么有的人又说了,取最小的相似值不就好了么,等于或小于这个值就表示正确。我们假定最相似值为0,

if(得到的识别值<=0){
//这张图片包含五星
}

当你实际识别的时候,会发现从N张图片查找的时候可能会发现有的五星返回的是0.1或0.01这些值。不会进入 if 判断,你能说这张图片不是五星?
为啥?你的模板图片只有一张固定的,在不同分辨率多样化的图片上肯定有所差异。
除非你所有的图片内容及分辨率一致,只有星的数量不同,才可做到。

题外:想要实现上面的需求,OpenCV确实可以做到,只不过是里面其他的知识。我之前给别人做过自动化的识别,对方的业务是帮助软件或游戏公司做评分操作,会下发给平时做兼职的人,比如某些兼职平台,人们评分做完后上传截图,然后查看截图是否五星,五星表示完成任务,兼职完成可发钱。 看截图是很枯燥的,自动化舒服的很。千条数据只需不到一分钟。因为业务简单碰巧截图无干扰因素,识别率百分百。

😜原理?

算法核心原理就不探究了,大佬们感兴趣可自行搜索或看官方文档。博主通常是能用,知道中层知识,能满足业务就够了。比如人们用电脑,并不需要去深究电脑是怎么生产的。

😜API解析

public static void matchTemplate(Mat image, Mat templ, Mat result, int method, Mat mask) 

在这里插入图片描述
如图所示:

  • 参数一:image,待匹配图像。必须是8位或者32位浮点图像。
  • 参数二:templ,模板图像,类型与输入图像一致,并且大小不能大于源图像。
  • 参数三:result,输出结果,必须是单通道32位浮点数,假设源图像WH,模板图像wh, 则结果必须为(W-w+1)*(H-h+1)的大小。
  • 参数四:method(如上图有六种),匹配方式标志位。若为TM_SQDIFF或者TM_SQDIFF_NORMED,计算值越小,匹配度越高,反之匹配越差,剩下的几个标志位,计算值越大,匹配度越高,反之匹配越差。
  • 参数五:mask,可选掩码。必须和templ参数大小相同,要么和templ通道数相同,要么单通道。如果数据类型为#CV_8U,则将掩码解释为二进制掩码,表示仅使用掩码为非零的元素,并且权重与实际掩码值无关(一直等于1)。若数据类型为#CV_32F,掩码值将作为权重参与计算。

如果你想将内容归一化,方便你处理业务,就需要利用 minMaxLoc 函数来处理。

minMaxLoc( result, &minVal, &maxVal, &minLoc, &maxLoc, Mat() );
函数中的参数有:
result: 匹配结果矩阵
&minVal 和 &maxVal: 在矩阵 result 中存储的最小值和最大值
&minLoc 和 &maxLoc: 在结果矩阵中最小值和最大值的坐标.
Mat(): 可选的掩模

在这里插入图片描述
源码就不放出了,里面有很多相关内容和类的互相引用,放一点读者复制运行不起来,都放出来又太多。干脆点。
直接下方V联系我发你我弄好的 Android 工程。

👉其他

📢作者:小空和小芝中的小空
📢转载说明-务必注明来源:https://zhima.blog.csdn.net/
📢这位道友请留步☁️,我观你气度不凡,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞👍收藏🌟今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。

温馨提示点击下方卡片获取更多意想不到的资源。
空名先生

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/169706.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

程序员职业生涯规划:多领域路线图一网打尽 | 开源日报 No.72

kamranahmedse/developer-roadmap Stars: 244.4k License: NOASSERTION 这是一个互动的路线图&#xff0c;指南和其他教育内容&#xff0c;旨在帮助开发人员在他们的职业生涯中成长。 提供多个不同领域 (如前端、后端、DevOps 等) 的路线图路线图可交互&#xff0c;并提供了详…

【vue+el-upload+vue-cropper】vue图片上传,vue-cropper图片裁剪后上传

一. 先看效果演示 二. 图片上传 用的el-upload加el-image组件 html部分 <el-dialog> ...//无关代码已省略<div v-for"item in imgArr" :key"item.index"><span>{{ item.name }}</span><el-upload action"#" list-t…

spring boot 中@Value读取中文配置时乱码

1.spring boot 读取application.properties 该文件是iso8859编码 如果是直接写中文 读取时会乱码 显示成?? 必须得转ascii码才能正常显示 其他方法测试也不行 Value("${apig.order.tiaokong.qianzi}") private String apigOrderTiaokongQianzi;

Leetcode154. Find Minimum in Rotated Sorted Array II

旋转数组找最小&#xff0c;这次值可以重复 不妨假设你已经做了上一题&#xff0c;题解 上一题的方法1肯定是用不了了&#xff0c;因为不再能完全分成2个不同的部分 所以我们沿着方法2走 如果 > n u m s [ r ] >nums[r] >nums[r]&#xff0c;我们依然可以找右半边 …

【Linux C IO多路复用】多用户聊天系统

目录 Server-Client mutiplexingServer mutiplexingClient mutiplexing Server-Client 在Linux系统中&#xff0c;IO多路复用是一种机制&#xff0c;它允许一个进程能够监视多个文件描述符&#xff08;sockets、pipes等&#xff09;的可读、可写和异常等事件。这样&#xf…

UE地形系统材质混合实现和Shader生成分析(UE5 5.2)

前言 随着电脑和手机硬件性能越来越高&#xff0c;游戏越来越追求大世界&#xff0c;而大世界非常核心的一环是地形系统&#xff0c;地形系统两大构成因素&#xff1a;高度和多材质混合&#xff0c;此篇文章介绍下UE4/UE5 地形的材质混合方案----基于WeightMap混合。 材质层 …

微软近日限制员工访问ChatGPT!

作者 | 撒鸿宇 据CNBC报道&#xff0c;在这周四的短时间内&#xff0c;微软的员工被禁止使用ChatGPT。 微软在其内部网站的更新中表示&#xff1a;“由于安全和数据问题&#xff0c;一些AI工具不再对员工开放。”据CNBC查证&#xff0c;他们看到了一张截图&#xff0c;该截图显…

thinkphp6 起步

1、安装 composer create-project topthink/think6.0 tp62、使用多应用模式&#xff0c;你需要安装多应用模式扩展think-multi-app composer require topthink/think-multi-app3、config/app.php中&#xff0c;将 ‘auto_multi_app’ > flase, 改为true&#xff1b; 需要自…

毫米波雷达技术在自动驾驶中的关键作用:安全、精准、无可替代

自动驾驶技术正以前所未有的速度不断演进&#xff0c;而其中的关键之一就是毫米波雷达技术。作为自动驾驶系统中的核心感知器件之一&#xff0c;毫米波雷达在保障车辆安全、实现精准定位和应对复杂环境中发挥着不可替代的作用。本文将深入探讨毫米波雷达技术在自动驾驶中的关键…

基于C#+WPF编写的调用讯飞星火大模型工具

工具源码&#xff1a;https://github.com/lishuangquan1987/XFYun.SparkChat 工具效果截图&#xff1a; 支持流式输出: 其中ApiKey/ApiSecret/AppId需要自己到讯飞星火大模型官网去注册账号申请&#xff0c;免费的。 申请地址&#xff1a;https://xinghuo.xfyun.cn/ 注册之…

NestJS——基于Node.js 服务器端应用程序的开发框架

文章目录 前言什么是 NestJS&#xff1f; 一、NestJS特性&#xff1f;二、使用步骤Typescript 知识后端开发基本知识新建项目目录结构 前言 Nestjs中文文档 什么是 NestJS&#xff1f; Nest (NestJS) 是一个用于构建高效、可扩展的 Node.js 服务器端应用程序的开发框架。它利用…