Skip to content

Automatically Cropping image using OpenCV #5

@DeepakHirapur

Description

@DeepakHirapur

Hi,

We are performing Auto Crop operations using OpenCV library in C# project, For few sample automatically cropping the image but for other samples It was not cropping properly.

Let us know anything is missing in source code.

Please find the below piece of code.

        `Mat image = new Mat();
        Microsoft.Win32.OpenFileDialog openFileDlg = new Microsoft.Win32.OpenFileDialog();
        Nullable<bool> result = openFileDlg.ShowDialog();
        if (result == true)
        {
            image = Cv2.ImRead(openFileDlg.FileName);
        }
        
        Mat GrayImage = new Mat();
        Cv2.CvtColor(image, GrayImage, ColorConversionCodes.BGR2GRAY);

        Mat BlurImage = new Mat();
        Cv2.GaussianBlur(GrayImage,BlurImage, new OpenCvSharp.Size(5,5),0);

        Mat CannyImage = new Mat();
        OpenCvSharp.Point[][] contours;
        HierarchyIndex[] hierarchy;
        Cv2.Canny(BlurImage, CannyImage, 80, 150,7);

        Cv2.ImShow("Original Image", image);
        Cv2.ImShow("Canny Edged Image", CannyImage);
        Cv2.DestroyAllWindows();
       
        Cv2.FindContours(CannyImage, out contours, out hierarchy,RetrievalModes.External, ContourApproximationModes.ApproxSimple);

        image.SaveImage(@"C:\Users\TestAccount\Documents\AutoCrop_OpenCV\Output03012022\20220103.jpeg");

        var contourIndex = 0;
        var previousArea = 0;
        var biggestContourRect = Cv2.BoundingRect(contours[0]);
        while ((contourIndex >= 0))
        {
            var contour = contours[contourIndex];

            var boundingRect = Cv2.BoundingRect(contour); //Find bounding rect for each contour
            var boundingRectArea = boundingRect.Width * boundingRect.Height;
            if (boundingRectArea > previousArea)
            {
                biggestContourRect = boundingRect;
                previousArea = boundingRectArea;
            }
            
            contourIndex = hierarchy[contourIndex].Next;
        }
        

        var finalImage = new Mat(image, biggestContourRect); //Crop the image
        string outputBaseDirectory = @"C:\Users\TestAccount\Documents\AutoCrop_OpenCV\Output03012022";
        finalImage.SaveImage(string.Format("{0}{1}{2}", outputBaseDirectory, "\\Output", System.IO.Path.GetFileName(openFileDlg.FileName)));
        Cv2.ImShow("Final Image", finalImage);`

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions