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); }
private void UpdateTowerZone() { images.gameImages.TryGetValue("Tower", out Bitmap bitmap); if (openCV.SearchImageFromRegion(bitmap, out Point p, new Point(300, 40), new Point(1220, 600))) { Color color = autoIt.IntToColor(autoIt.au3.PixelGetColor(p.X + 13 + autoIt.window.X, p.Y + 10 + autoIt.window.Y)); if (color.R > 150 && color.G > 150 && color.B < 150) { overlay.DrawText("TowerZone!", 40, 680); overlay.DrawRect(p.X - 10, p.Y - 10, 46, 46); TowerZone = true; } }