要說跟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,還挺不錯的。
多圖結果返回的話,想研究的大佬,可以研究研究。
效果

可以看到查找速度還是很快的,當然,第一次可能會稍微慢點,近200毫秒了
總結
這個案例搞定,就意味著往WEB 頁面滑動圖解鎖驗證 自動化又前進了一步,后面想想如何做這個案例。
代碼地址
https://github.com/kesshei/SearchImageDemo.git
https://gitee.com/kesshei/SearchImageDemo.git
閱
一鍵三連呦!,感謝大佬的支持,您的支持就是我的動力!