public static VectorOfPoint getMaxContour(Image <Bgr, Byte> src) { VectorOfPoint maxContour = null; VectorOfVectorOfPoint contours = new VectorOfVectorOfPoint(); Image <Gray, Byte> gray = src.Convert <Gray, Byte>(); Image <Gray, Byte> mask = gray.CopyBlank(); CvInvoke.Threshold(gray, mask, 0, 255, Emgu.CV.CvEnum.ThresholdType.Binary); CvInvoke.FindContours(mask.Clone(), contours, null, Emgu.CV.CvEnum.RetrType.External, Emgu.CV.CvEnum.ChainApproxMethod.ChainApproxSimple); int contoursCount = contours.Size; if (contoursCount > 0) { float maxArea = 0; for (int i = 0; i < contoursCount; i++) { using (VectorOfPoint contour = contours[i]){ float area = Convert.ToSingle(CvInvoke.ContourArea(contour, false)); if (area > maxArea) { maxContour = contour.DeepClone(); maxArea = area; } } } } mask.Dispose(); gray.Dispose(); return(maxContour); }