【问题标题】:Resizing/Cropping an image using Opencv使用 Opencv 调整图像大小/裁剪图像
【发布时间】:2016-04-21 00:59:03
【问题描述】:

我是 OpenCV 的新手,希望在我正在进行的项目中获得帮助。我想将前景与背景分开并调整/裁剪原始图像的大小以使前景适合。

我有这个样本,我希望能够得到这样的最佳结果:

之前

之后

【问题讨论】:

    标签: c++ opencv crop image-resizing image-segmentation


    【解决方案1】:

    一个简单的代码只是为了给出一个想法。它适用于像你这样的图像。

    (注意:我部分使用了这个code

    #include "opencv2/opencv.hpp"
    
    using namespace cv;
    using namespace std;
    
    int main( int argc, char** argv )
    {
        int largest_area=0;
        int largest_contour_index=0;
        cv::Rect bounding_rect;
    
        Mat src = imread(argv[1]);
        Mat edges;
    
        cvtColor( src, edges, COLOR_BGR2GRAY ); //Convert to gray
        GaussianBlur(edges, edges, Size(7,7), 1.5, 1.5);
        Canny(edges, edges, 0, 50, 3);
        dilate(edges,edges,Mat(),Point(-1,-1),3);
        erode(edges,edges,Mat(),Point(-1,-1),3);
    
        vector<vector<cv::Point> > contours; // Vector for storing contour
    
        findContours( edges, contours,CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE ); // Find the contours in the image
    
        for( int i = 0; i< contours.size(); i++ ) // iterate through each contour.
        {
            double a=contourArea( contours[i],false);  //  Find the area of contour
            if(a>largest_area)
            {
                largest_area=a;
                largest_contour_index=i;                //Store the index of largest contour
                bounding_rect=boundingRect(contours[i]); // Find the bounding rectangle for biggest contour
            }
        }
    
        // ------------
        // makes border
        bounding_rect.x -= 10;
        bounding_rect.y -= 10;
        bounding_rect.width += 20;
        bounding_rect.height += 20;
        bounding_rect = Rect(0,0,src.cols,src.rows) & bounding_rect;
        // ------------
    
        Mat biggest_contour_rect = src( bounding_rect ).clone();
        imshow("biggest_contour_rect", biggest_contour_rect );
        waitKey(0);
        return 0;
    }
    

    【讨论】: