internal bool SearchImageFromDict(Dictionary <string, Bitmap> buttonImages, out Point centerPoint, out string name) { window = autoIt.window; double threshold = 0.85; name = null; centerPoint = new OpenCvSharp.Point(); gameScreen_graphics.CopyFromScreen(window.X, window.Y, 0, 0, size_region); using Mat result = new Mat(); using Mat gameScreen = OpenCvSharp.Extensions.BitmapConverter.ToMat(gameScreen_bitmap); //Сохраняем скрин экрана в mat using Mat mat_region_desktop_gray = gameScreen.CvtColor(ColorConversionCodes.BGR2GRAY); foreach (KeyValuePair <string, Bitmap> buttonImage in buttonImages) { using Mat searchImg = OpenCvSharp.Extensions.BitmapConverter.ToMat(buttonImage.Value); using Mat searchImg_gray = searchImg.CvtColor(ColorConversionCodes.BGR2GRAY); Cv2.MatchTemplate(mat_region_desktop_gray, searchImg_gray, result, TemplateMatchModes.CCoeffNormed); //Поиск шаблона Cv2.Threshold(result, result, threshold, 1.0, ThresholdTypes.Tozero); Cv2.MinMaxLoc(result, out double minVal, out double maxVal, out OpenCvSharp.Point minLoc, out OpenCvSharp.Point maxLoc); //Поиск точки if (maxVal > threshold) { centerPoint = new OpenCvSharp.Point(maxLoc.X + buttonImage.Value.Width / 2, maxLoc.Y + buttonImage.Value.Height / 2); overlay.DrawRect(maxLoc.X, maxLoc.Y, buttonImage.Value.Width, buttonImage.Value.Height); name = buttonImage.Key; return(true); } } return(false); }
internal bool SearchImageFromRegion(Bitmap bitmap, out Point f, Point start, Point end) { int widthRegion = end.X - start.X; int heightRegion = end.Y - start.Y; double threshold = 0.9; //Пороговое значение SearchImg f = new OpenCvSharp.Point(); if (bitmap == null) { console.WriteLine("Error. Null bitmap."); return(false); } if (widthRegion < 1 || heightRegion < 1 || end.X > window.Width || end.Y > window.Height) { console.WriteLine("Error region."); return(false); } using Bitmap gameRegion_bitmap = new Bitmap(widthRegion, heightRegion, System.Drawing.Imaging.PixelFormat.Format24bppRgb); using Graphics gameRegion_graphics = Graphics.FromImage(gameRegion_bitmap); System.Drawing.Size region = new System.Drawing.Size(end.X - start.X, end.Y - start.Y); gameRegion_graphics.CopyFromScreen(window.X + start.X, window.Y + start.Y, 0, 0, region); //делаем скрин экрана using Mat gameScreen = OpenCvSharp.Extensions.BitmapConverter.ToMat(gameRegion_bitmap); //Сохраняем скрин экрана в mat using Mat gameScreenGrayRegion = gameScreen.CvtColor(ColorConversionCodes.BGR2GRAY); //Cv2.ImShow("Matches", gameScreen); //Cv2.WaitKey(); using Mat searchImg = OpenCvSharp.Extensions.BitmapConverter.ToMat(bitmap); using Mat searchImgGray = searchImg.CvtColor(ColorConversionCodes.BGR2GRAY); using Mat result = new Mat(); Cv2.MatchTemplate(gameScreenGrayRegion, searchImgGray, result, TemplateMatchModes.CCoeffNormed); //Поиск шаблона Cv2.Threshold(result, result, threshold, 1.0, ThresholdTypes.Tozero); Cv2.MinMaxLoc(result, out double minVal, out double maxVal, out OpenCvSharp.Point minLoc, out OpenCvSharp.Point maxLoc); //Поиск точки if (maxVal > threshold) { f = new OpenCvSharp.Point(maxLoc.X + start.X, maxLoc.Y + start.Y); // overlay.DrawRect(maxLoc.X + start.X, maxLoc.Y+ start.Y, bitmap.Width, bitmap.Height); } else { return(false); } return(true); }