Ejemplo n.º 1
0
        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);
        }