Exemple #1
0
        private void AutoCrop(string path)
        {
            using var image = new Image <Bgr, byte>(path);
            // Grayscale
            var grayScaleImage = image.Convert <Gray, byte>();

            // Applying GaussianBlur
            var blurredImage = grayScaleImage.SmoothGaussian(5, 5, 0, 0);

            // OR
            CvInvoke.GaussianBlur(grayScaleImage, blurredImage, new Size(5, 5), 0);

            // Applying Canny algorithm
            var cannyImage = new UMat();

            CvInvoke.Canny(blurredImage, cannyImage, 50, 150);

            // Finding largest contours
            var contours = new VectorOfVectorOfPointF();

            CvInvoke.FindContours(cannyImage, contours, null, RetrType.Tree, ChainApproxMethod.ChainApproxSimple);

            for (int i = 0; i < contours.Size; i++)
            {
                var contourVector = contours[i];
                using var contour = new VectorOfPoint();
                var peri = CvInvoke.ArcLength(contourVector, true);
                CvInvoke.ApproxPolyDP(contourVector, contour, 0.1 * peri, true);
                if (contour.ToArray().Length == 4 && CvInvoke.IsContourConvex(contour))
                {
                    Debug.WriteLine(contour.ToString());
                    // return contour;
                }
            }
        }