public static MedalType DetermineMedalOnCard(Bitmap card) { ExhaustiveTemplateMatching tm = new ExhaustiveTemplateMatching(0); var goldSimilarity = tm.ProcessImage(card, Image.FromFile("TemplateImages/gold_medal.png"), new Rectangle(80, 40, 200, 200))[0].Similarity; if (goldSimilarity > 0.95f) { return(MedalType.Gold); } var silverSimilarity = tm.ProcessImage(card, Image.FromFile("TemplateImages/silver_medal.png"), new Rectangle(80, 40, 200, 200))[0].Similarity; if (silverSimilarity > 0.95f) { return(MedalType.Silver); } var bronzeSimilarity = tm.ProcessImage(card, Image.FromFile("TemplateImages/bronze_medal.png"), new Rectangle(80, 40, 200, 200))[0].Similarity; if (bronzeSimilarity > 0.95f) { return(MedalType.Bronze); } var noMedalSimilarity = tm.ProcessImage(card, Image.FromFile("TemplateImages/no_medal.png"), new Rectangle(80, 40, 200, 200))[0].Similarity; if (noMedalSimilarity > 0.95f) { return(MedalType.None); } return(MedalType.Uncertain); }
public static GameResult DetermineGameResult(Bitmap screenshot) { ExhaustiveTemplateMatching tm = new ExhaustiveTemplateMatching(0); if (screenshot.PixelFormat != PixelFormat.Format24bppRgb) { screenshot = screenshot.To24Bpp(); } var win = tm.ProcessImage(screenshot, Image.FromFile("assets/victory_template.png"), new Rectangle(60, 50, 315, 80))[0].Similarity; if (win > 0.92f) { return(GameResult.Victory); } var defeat = tm.ProcessImage(screenshot, Image.FromFile("assets/defeat_template.png"), new Rectangle(60, 50, 265, 80))[0].Similarity; if (defeat > 0.92f) { return(GameResult.Defeat); } var draw = tm.ProcessImage(screenshot, Image.FromFile("assets/draw_template.png"), new Rectangle(60, 50, 265, 80))[0].Similarity; if (draw > 0.92f) { return(GameResult.Draw); } return(GameResult.Uncertain); }
public ImageTransformation(string fileName) { this.image = Image.FromFile(fileName); //TODO: Threshold will probably be needed for noisy images //var thresholdFilter = new Threshold(100); //thresholdFilter.ApplyInPlace(image); //var invertFilter = new Invert(); //var invertedImage = invertFilter.Apply(image); }
public static Bitmap OpenImage(this TextStructure filePath) { try { using (var bitmap = new Bitmap(filePath.Value)) { return(Image.Clone(bitmap, PixelFormat.Format24bppRgb)); } } catch (Exception ex) { throw new Exception($"Could not open the image file '{filePath.Value}'. Message: {ex.Message}", ex); } }
/// <summary> /// Process image looking for corners. /// </summary> /// <param name="cornerDetector">Corner detection algorithm instance.</param> /// <param name="image">Source image to process.</param> /// <returns>Returns list of found corners (X-Y coordinates).</returns> public static List<Point> ProcessImage(this ICornersDetector cornerDetector, Image<Gray, byte> image) { return cornerDetector.ProcessImage(image.ToAForgeImage(copyAlways: false, failIfCannotCast: true)); }
private static readonly double _pokemonCardRatio = 63.0 / 88; // Width / Height public static Bitmap Format(Bitmap bitmap) { return(Image.Clone(bitmap, PixelFormat.Format24bppRgb)); }