AI 之 OpenCvSharp 大图找小图(案例版)

要说跟AI扯上啥关系,估计只有库本身了,但是,这个大图搜小图功能还是不错的,有喜欢的可以试试。我主要用的场景是,具体的某个界面为大图,界面的某个图标为小图,或者,整个桌面为大图,某个小图标为小图这样来确定某个插件或者功能的位置。

之前也写了一下基于C#代码的找图,但是感觉效率不高,这次做个基于OpenCvSharp的找图功能,有喜欢的可以尝试下。

创建一个Winfrom项目

因为项目示例简单,但是,又需要获取桌面大小,得创建这样的项目。

要添加Nuget包

Install-Package OpenCvSharp4.Windows -Version 4.6.0.20220608

查找主要业务代码

public static Rectangle Find(Image sourceImage, Image matchImage, double threshold = 0.8)
{var refMat = Mat.FromImageData(ImageHelper.ImageToBytes(sourceImage), ImreadModes.AnyColor);//大图var tplMat = Mat.FromImageData(ImageHelper.ImageToBytes(matchImage), ImreadModes.AnyColor);//小图using (Mat res = new Mat(refMat.Rows - tplMat.Rows + 1, refMat.Cols - tplMat.Cols + 1, MatType.CV_32FC1)){Mat gref = refMat.CvtColor(ColorConversionCodes.BGR2GRAY);Mat gtpl = tplMat.CvtColor(ColorConversionCodes.BGR2GRAY);Cv2.MatchTemplate(gref, gtpl, res, TemplateMatchModes.CCoeffNormed);Cv2.Threshold(res, res, 0.8, 1.0, ThresholdTypes.Tozero);double minval, maxval;Point minloc, maxloc;Cv2.MinMaxLoc(res, out minval, out maxval, out minloc, out maxloc);if (maxval >= threshold){return new Rectangle(maxloc.X, maxloc.Y, tplMat.Width, tplMat.Height);}return Rectangle.Empty;}
}

可以根据相似度来实现搜索,其实如果直接屏幕截图的话,相似度都是0.99,还挺不错的。

多图结果返回的话,想研究的大佬,可以研究研究。

效果

d981e0c1220c1deb6b94b8da14553c2f.png

可以看到查找速度还是很快的,当然,第一次可能会稍微慢点,近200毫秒了

总结

这个案例搞定,就意味着往WEB 页面滑动图解锁验证 自动化又前进了一步,后面想想如何做这个案例。

代码地址

https://github.com/kesshei/SearchImageDemo.git

https://gitee.com/kesshei/SearchImageDemo.git

一键三连呦!,感谢大佬的支持,您的支持就是我的动力!

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

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

相关文章

SaaS应用的十二要素

简介 如今,软件通常会作为一种服务来交付,它们被称为网络应用程序,或软件即服务(SaaS)。12-Factor 为构建如下的 SaaS 应用提供了方法论: 使用标准化流程自动配置,从而使新的开发者花费最少的…

对话Linus:Linux 25岁啦

作为芬兰Helsinki大学计算机科学系的学生,Linus Torvalds在1991年编写了Linux操作系统的原始内核。很快,Linux就发展成为了一个全特征的操作系统,并开始运行在智能手机、服务器和各种设备中。在本次通过e-mail进行的访谈中,Torval…

路由器与交换机区别

路由器与交换机区别 近日,在回答知道网友提问的时候,发现很多朋友不知道路由器与交换机的不同,常常问一些看起来有点可笑的问题。比如路由器同时登陆两个账号,所以今天写下这篇经验,科普一下路由器的功能和交换机的功能…

【QGIS入门实战精品教程】1.2:QGIS与ArcGIS的区别和联系

「刘一哥GIS」系列专栏《QGIS入门实战精品教程(配套案例数据)》目录 以下是GISGeography官方给出的两者之间的27点比较(译): 官方网址:https://gisgeography.com/qgis-arcgis-differences/ 1.QGIS容纳更多的数据格式 ArcGIS没有支持所有的数据格式,毫无疑问,QGIS在处…

mysql中的增删改查

显示数据库中有的表格 SHOW TABLES增 新建表格 CREATE TABLE urls( id int, url varchar(100), description varchar(100) ) 插入值 INSERT INTO chflvghu_test.user (user, password) VALUES (小红, qwerty); 插入多条数据 INSERT INTO chflvghu_test.user (user, password) V…

押注.NET 是件好事

作者 | Bryan Costanich译者 | 明知山策划 | 褚杏娟作为一个在.NET 上构建了不止一个流行平台的人,我经常被问到它的相关性,以及它是不是一个值得投入的生态系统。这个问题在旧金山湾区的技术世界里尤为流行,这里的技术潮流就像四季一样变更交…

8-12 canvas专题-阶段练习一(上)

8-12 canvas专题-阶段练习一&#xff08;上&#xff09; 1 <!DOCTYPE html>2 <html lang"zh-cn">3 <head>4 <meta charset"UTF-8">5 <title>8-12 课堂演示</title>6 </head>7 <style type"text…

【QGIS入门实战精品教程】2.2:QGIS软件的下载与安装(Windows)

文章目录 一、QGIS下载二、QGIS安装​一、QGIS下载 QGIS软件官网下载地址:https://www.qgis.org/en/site/ 进入官网之后,点击【Download Now】进入下载页面: 选择对应的版本进行下载: 开始下载:

UVa 10061 How many zero's and how many digits?

方法&#xff1a; factorial mod&#xff0c; logarithm 求trailing zeros&#xff0c;其实就是factorial mod 的应用&#xff0c; 求长度&#xff0c;利用log 函数。需要注意的是&#xff0c;答案为int(log(n!)/log(b)) 1, 比如 a 2, b 2, 长度为2. code: #include <cst…

Linux sudo找不到命令:修改sudo的PATH路径

为什么80%的码农都做不了架构师&#xff1f;>>> sudo有时候会出现找不到命令&#xff0c;而明明PATH路径下包含该命令&#xff0c;让人疑惑。其实出现这种情况的原因&#xff0c;主要是因为当 sudo以管理权限执行命令的时候&#xff0c;linux将PATH环境变量进行了重…

Javscript 实现字符数串比对排序(包含数字及中文数字)

主要代码&#xff1a; /** *description: 比较两个字符串大小 *author: JackieZheng *date: 2020-12-03 19:59:39 */ function compare(a, b) {if (a b) {return 0;} else {let lsta a.toString().replace(/[一二三四五六七八九十百千万亿]/g, ChineseToNumber).split(/(\d…

【QGIS入门实战精品教程】4.2:QGIS矢量数据采集(地图数字化)案例教程

本文基于上一个实验栅格数据地理配准,讲述在QGIS中创建shp格式矢量数据(点、线、面)并进行矢量数据的采集与编辑。 文章目录 一、实验数据及任务二、创建Shapefile图层三、数字化超详细步骤一、实验数据及任务 1. 实验数据:为了保证实验的连贯性,本次实验采用的数据为上一…

快速判断站点是否存活的 3 种编程实现

前言如何知道外部站点是否正在运行&#xff1f;如果使用浏览器&#xff0c;直接访问对应站点即可。那么&#xff0c;使用 C# 以编程方式&#xff0c;如何实现呢&#xff1f;GET 请求首先想到的&#xff0c;就是使用 HttpClient 向该站点发送 HTTP 请求&#xff0c;并检查返回状…

jQuery.ajax实现根据不同的Content-Type做出不同的响应

使用H5ASP.NET General Handler开发项目&#xff0c;使用ajax进行前后端的通讯。有一个场景需求是根据服务器返回的不同数据类型&#xff0c;前端进行不同的响应&#xff0c;这里记录下如何使用$.ajax实现该需求。 $.ajax({‘url‘: ‘GetWatermarkInfo.ashx‘,‘type‘:‘post…

论文的写作要求、流程与写作技巧

论文的写作要求、流程与写作技巧 广义来说&#xff0c;凡属论述科学技术内容的作品&#xff0c;都称作科学著述&#xff0c;如原始论著&#xff08;论文&#xff09;、简报、综合报告、进展报告、文献综述、述评、专著、汇编、教科书和科普读物等。但其中只有原始论著及其简报是…

【数据结构与算法】拓扑排序问题C语言实现

拓扑排序是有向无环图的一种应用,在实际生活中用的很多。 比如GIS专业的课程设计,许多课程需要前置课程要求,也就是说没上过A课程、则不可能直接去学B课程,画个图表就是: 同理,我们教材中的范例:穿衣服的过程也是一个拓扑排序问题,如下表: 有关这个拓扑排序的模型构造…

[转]2020年排名前20的基于SpringBoot搭建的开源项目,帮你快速进行项目搭建!

△Hollis, 一个对Coding有着独特追求的人△ 这是Hollis的第 287 篇原创分享 作者 l Hollis 来源 l Hollis&#xff08;ID&#xff1a;hollischuang&#xff09; SpringBoot一直是开发者比较青睐的一款轻量级框架&#xff0c;他不仅继承了Spring框架原有的优秀特性&#xff0c;而…

操作系统基础知识

操作系统的主要特性: 并发,共享,异步,虚拟性 分类 批处理系统 用户将一批作业提交给操作系统后就不再干预&#xff0c;由操作系统控制它们自动运行 批处理操作系统的特点是&#xff1a;多道和成批处理。分时实时可以通过命令接口和程序接口方式把它的服务和功能提供给用户 程序…

C# 搭建一个基于.NET5的WPF入门项目

概述.NET5 发布已经有一阵子了&#xff0c;今天抽空体验一哈&#xff0c;搭建一个WPF项目实例&#xff0c;看看和传统的.NET Framework有什么区别&#xff01;开发环境&#xff1a;VS2019 WPF框架&#xff1a;Caliburn.Micro 版本4.0.173.NET版本&#xff1a;.NET5.0项目创建步…

五个最佳案例带你解读 Node.js 的前后之道

Node.js 是什么&#xff1f; Node.js 采用 C语言编写而成&#xff0c;浏览器内核 V8 做为执行引擎&#xff1b; Node 不是 JS 应用、而是一个 Javascript 的运行环境。 Node 保留了前端浏览器 js 的接口&#xff0c;没有改写语言本身的任何特性&#xff0c;依旧基于作用域和原型…