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

news2024/12/22 20:16:22
  • 点击跳转=>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.coloradmin.cn/o/1182293.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

麒麟v10 安装jenkins

1.想安装哪个版本&#xff1f; https://pkg.jenkins.io/redhat-stable/ 我们查看我们想要哪个版本&#xff1a; 4年前安装的是 Jenkins2.279 版本 现在在docker 上安装的是Version 2.425 版本 2.碰到到的问题 1.安装老版本的Jenkins&#xff0c;会出现安装的插件不兼容&…

win版redis详细安装教程

一、下载 github下载地址 https://github.com/MicrosoftArchive/redis/releases 可选择&#xff1a;下载msi包或zip压缩包 这里我选择的是zip压缩包&#xff0c;直接通过cmd命令窗口操作即可。 二、安装步骤 1、解压Redis压缩包 选中压缩包&#xff0c;右键选择解压&#…

WordPress 主题QUX DUX加强版

模板简介&#xff1a; QUX主题是由轻语博客在大前端DU主题的基础上集成了Ucenter&Market插件后修改加强版&#xff0c;在原有主题的基础上迎合市场增加了很多的功能。主题已解密去授权。 更新内容&#xff1a; 新增关闭注册验证码&#xff08;主题设置–会员中心&#xff…

【黑马程序员】SpringCloud——微服务

文章目录 前言一、服务架构演变1. 单体架构2. 分布式架构2.1 服务治理 3. 微服务3.1 微服务结构3.2 微服务技术对比3.3 企业需求 二、SpringCloud兼容性 三、服务拆分及远程调用1. 服务拆分1.1 服务拆分注意事项1.2 导入服务拆分 Demo 2. 远程调用2.1 根据订单 id 查询订单功能…

2023年10月CSDN客服月报|解决9个重大问题、12个次要问题、12个一般问题,处理5个用户需求

听用户心声&#xff0c;解用户之需。hello&#xff0c;大家好&#xff0c;这里是《CSDN客诉报告》第25期&#xff0c;接下来就请大家一同回顾我们10月份解决的bug&#xff5e; 一、重大问题 1、全站无法访问 反馈量&#xff1a;90问题原因&#xff1a;DDOS攻击具体表现&…

day3 ARM

【昨日作业】 .text .global start _start: mov r0,#0 存放sum mov r1,#1 存放相加的数值 loop: cmp r1,#100 bhi wh add r0,r0,r1 add r1,r1,#1 b loop wh: b wh .end 【内存读写指令】 通过内存读写指令可以实现向内存中写入指定数据或者读取指定内存地址的数据 c语言内存…

【Python3】【力扣题】231. 2 的幂

【力扣题】题目描述&#xff1a; 此题&#xff1a;n为整数&#xff08;32位有符号整数&#xff09;&#xff0c;x为整数。 2 的幂次方都大于0。若幂为负数&#xff0c;则0<n<1&#xff0c;n不为整数。 因此&#xff0c;n为正整数&#xff0c;x为0和正整数。 若二进制表示…

学为贵雅思写作备考

准确通顺&#xff0c;言之有物 两次读不懂&#xff0c;6分以下&#xff0c; 6分没有印象&#xff0c;味同嚼蜡&#xff0c;但是没错&#xff08;书面语过关&#xff09; 英语比较过关 8-9分&#xff0c;很有见地 6-7单个的句子读得懂&#xff0c;前后是贯通的、逻辑是通顺…

决策式AI与生成式AI

人工智能中深度学习&#xff0c;是一种受人脑的生物神经网络机制启发&#xff0c;并模仿人脑来解释、处理数据的机器学习技术&#xff0c;它能自动对数据进行特征提取、识别、决策和生成。它可以从不同的维度进行划分&#xff0c;如果按模型的特点来划分可分为决策式AI和生成式…

open clip论文阅读摘要

看下open clip论文 Learning Transferable Visual Models From Natural Language Supervision These results suggest that the aggregate supervision accessible to modern pre-training methods within web-scale collections of text surpasses that of high-quality crowd…

我的AIGC部署实践02

我的AIGC部署实践02 上次的教程我们实现了在趋势云平台上创建项目并运行对应的代码。虽然有比较好的结果&#xff0c;不过很多时候我们往往需要根据自己的需要更改代码&#xff0c;那么代码运行及部署的流程是怎么样的呢&#xff1f;让我们继续往下看吧。 1.学习准备 官方代码…

测试工程师面试攻略:教你如何描述项目经验

俗话说的好&#xff0c;知己知彼百战百胜。项目经验说的好不好&#xff0c;直接决定了你值多少钱。满满的干货&#xff0c;先三连再耐心看完。 去面试之前&#xff0c;建议大家把简历写得从业经历和项目经验熟练的背下来&#xff0c;能说出项目经验里的详细的测试情况最好。 一…

工程(十三)——基于激光视觉的SLAM三维重建

博主创建了一个科研互助群Q&#xff1a;772356582&#xff0c;欢迎大家加入讨论。这是一个科研互助群&#xff0c;主要围绕机器人&#xff0c;无人驾驶&#xff0c;无人机方面的感知定位&#xff0c;决策规划&#xff0c;以及论文发表经验&#xff0c;以方便大家很好很快的科研…

了解企业邮箱的外观和功能特点

企业邮箱是什么样子的&#xff1f;企业邮箱不是单一产品&#xff0c;而是由一系列电子邮件服务组成的生态系统。这些服务包括但不限于邮件服务器、客户端、安全解决方案等。这些服务共同构成了企业邮箱的基础设施。 在外观上&#xff0c;企业邮箱和个人邮箱没有太大区别。用户通…

查询优化器:RBO与CBO

SQL查询优化器 1、数据库系统发展简史2、SQL查询优化器3、查询优化器分类4、查询优化器执行过程5、CBO框架Calcite简介 1、数据库系统发展简史 数据库系统诞生于20世纪60年代中期&#xff0c;至今已有近50多年的历史&#xff0c;其发展经历了三代演变&#xff0c;造就了四位图灵…

6个机器学习可解释性框架

1、SHAP SHapley Additive explanation (SHAP)是一种解释任何机器学习模型输出的博弈论方法。它利用博弈论中的经典Shapley值及其相关扩展将最优信贷分配与局部解释联系起来. 举例&#xff1a;基于随机森林模型的心脏病患者预测分类 数据集中每个特征对模型预测的贡献由Shap…

Vscode禁止插件自动更新

由于电脑的vscode版本不是很新。2022.10月份的版本1.7.2&#xff0c;电脑vscode的python插件装的也是2022年4月份的某个版本&#xff0c;但插件经常自动更新&#xff0c;导致python代码无法Debug,解决办法&#xff1a; 点设置&#xff0c;搜autoUpdate, 把红色框选成无

浅析刚入门Python初学者的注意事项

文章目录 一、注意你的Python版本1.print()函数2.raw_input()与input()3.比较符号&#xff0c;使用!替换<>4.repr函数5.exec()函数 二、新手常遇到的问题1、如何写多行程序&#xff1f;2、如何执行.py文件&#xff1f;3、and&#xff0c;or&#xff0c;not4、True和False…

HTML和CSS入门学习

目录 一.HTML 二.CSS 1.CSS作用&#xff1a;美化页面 2.CSS语法 【1】CSS语法规范 【2】如何插入样式表 3.CSS选择器 4.CSS设置样式属性--设置html各种标签的属性 【1】文本属性--设置整段文字的样式 【2】字体属性--设置单个字的样式 【3】链接属性--设置链接的样式…

【Qt绘制小猪】以建造者模式绘制小猪

效果 学以致用&#xff0c;使用设计模式之建造者模式绘制小猪。 代码 接口&#xff1a;申明绘制的步骤 PigBuilder.h #ifndef PIGBUILDER_H #define PIGBUILDER_H#include <QObject> #include <QPainter>class PigBuilder : public QObject {Q_OBJECT public:ex…