public static void Preprocess_Final(string filepath, string outPath, bool displayMode, int thresholding) { displayMode = false; Console.WriteLine("Loading Image : " + filepath); Bitmap load = new Bitmap(filepath); var start = DateTime.Now; Console.WriteLine("Running Background Detection ..."); Bgr backgroundColor = Heuristics.DetectBackground(load, 20); Console.WriteLine("Detected Background : " + backgroundColor.ToString()); Console.WriteLine("Detected Background Completed in " + (DateTime.Now - start).TotalSeconds.ToString() + " seconds"); var backgroundGuess = new Image <Bgr, Byte>(100, 100, backgroundColor); if (displayMode) { ImageViewer display = new ImageViewer(backgroundGuess, "Mask"); display.ShowDialog(); } Console.WriteLine("Running Shred Extraction "); Console.WriteLine("Image Size : " + load.Height * load.Width + " Pixels"); string imagesrc = filepath; Bitmap source = new Bitmap(imagesrc); Console.WriteLine("beginning flood fill..."); Point startPoint = Heuristics.GetStartingFloodFillPoint(source, Color.FromArgb(255, (int)backgroundColor.Red, (int)backgroundColor.Green, (int)backgroundColor.Blue)); Bitmap Mask = Preprocessing.FloodFill(source, startPoint.X, startPoint.Y, 50, backgroundColor); Console.WriteLine("flood fill complete..."); Console.WriteLine("extracting objects..."); List <Bitmap> extractedobj = Preprocessing.ExtractImages(source, Mask); Console.WriteLine("Extracted " + extractedobj.Count + " objects"); if (displayMode) { // Display to the User var result = new Image <Bgr, Byte>(source); Image <Bgra, Byte> image = new Image <Bgra, byte>(Mask); ImageViewer maskView = new ImageViewer(image, "Mask"); var scale = Math.Min(800.0 / result.Height, 800.0 / result.Width); maskView.ImageBox.SetZoomScale(scale, new Point(10, 10)); maskView.ShowDialog(); // Display Each Shred That is extracted foreach (var shred in extractedobj) { Image <Bgra, Byte> cvShred = new Image <Bgra, byte>(shred); ImageViewer box = new ImageViewer(cvShred, "Mask"); var shredScale = Math.Min(800.0 / cvShred.Height, 800.0 / cvShred.Width); box.ImageBox.SetZoomScale(shredScale, new Point(10, 10)); box.ShowDialog(); } } // Prompt for input directory and Write to file Console.Write("Enter Output Directory (Default is Working): "); string directory = outPath;// Console.ReadLine(); if (String.IsNullOrEmpty(directory) || !Directory.Exists(directory)) { Console.WriteLine("Writing to Working Directory"); directory = string.Empty; } else { directory += "\\"; } Console.WriteLine("Rotating Images"); int ii = 0; int maxLen = extractedobj.Count.ToString().Length; foreach (Bitmap bm in extractedobj) { Bitmap bm2 = Preprocessing.Orient(bm); bm2.Save(directory + "image" + ii.ToString("D" + maxLen) + ".png"); ii++; } Console.WriteLine("Wrote Files To Disk"); }