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.pswp.cn/news/284760.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/284760.shtml
英文地址,請注明出處:http://en.pswp.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;依舊基于作用域和原型…