public static void GetAllObjects(Bitmap src, out Bitmap result, out List <BloodObjects> allObjects, string adrWEB) { allObjects = new List <BloodObjects>(); string adr = string.Empty; try { adr = "temp.jpg"; File.Delete(adr); src.Save(adr); } catch (System.Runtime.InteropServices.ExternalException) { adr = adrWEB; File.Delete(adr); src.Save(adr); } IplImage image = Cv.LoadImage(adr, LoadMode.AnyColor); IplImage gray = Cv.CreateImage(Cv.GetSize(image), BitDepth.U8, 1); IplImage bin = Cv.CreateImage(Cv.GetSize(image), BitDepth.U8, 1); IplImage dst = Cv.CloneImage(image); Cv.CvtColor(image, gray, ColorConversion.RgbToGray); Cv.InRangeS(gray, 150, 255, bin); CvMemStorage storage = Cv.CreateMemStorage(0); CvSeq <CvPoint> contours = null; int cont = Cv.FindContours(bin, storage, out contours, CvContour.SizeOf, ContourRetrieval.List, ContourChain.ApproxTC89KCOS, Cv.Point(0, 0)); contours = Cv.ApproxPoly(contours, CvContour.SizeOf, storage, ApproxPolyMethod.DP, 0, true); int id = 0; for (CvSeq <CvPoint> seq0 = contours; seq0 != null; seq0 = seq0.HNext) { if (Cv.ContourArea(seq0) > 100 && Cv.ContourArea(seq0) < (image.Height * image.Width * 0.5)) { CvMoments moments = new CvMoments(); Cv.Moments(seq0, out moments, true); double xc = (moments.M10 / moments.M00); double yc = (moments.M01 / moments.M00); double distance = Math.Sqrt(xc * xc + yc * yc); allObjects.Add(new BloodObjects( id, seq0, seq0.ToList(), Cv.ContourArea(seq0), new CvPoint2D32f(xc, yc), distance, Math.Pow(Cv.ContourPerimeter(seq0), 2) / Cv.ContourArea(seq0), Cv.ContourPerimeter(seq0), Group.Interest)); id++; } } allObjects = Classified(allObjects); allObjects.Sort(delegate(BloodObjects ob1, BloodObjects ob2) { return(ob1.Distance.CompareTo(ob2.Distance)); }); for (int i = 0; i < allObjects.Count; i++) { allObjects[i].Id = i; if (allObjects[i].Group == Group.Interest) { Cv.DrawContours(dst, allObjects[i].Contour, Cv.RGB(0, 250, 0), Cv.RGB(50, 250, 0), 0, -1, LineType.Link8); } else if (allObjects[i].Group == Group.Small) { Cv.DrawContours(dst, allObjects[i].Contour, Cv.RGB(0, 0, 250), Cv.RGB(50, 250, 0), 0, -1, LineType.Link8); } else { Cv.DrawContours(dst, allObjects[i].Contour, Cv.RGB(250, 0, 0), Cv.RGB(50, 250, 0), 0, -1, LineType.Link8); } dst.PutText( allObjects[i].Id.ToString(), allObjects[i].Center, new CvFont(FontFace.HersheySimplex, 0.4, 0.4, 0.5, 1, LineType.Link8), CvColor.Black); } allObjects.Sort(delegate(BloodObjects ob1, BloodObjects ob2) { return(ob1.Id.CompareTo(ob2.Id)); }); result = dst.ToBitmap(); }