0
    #include <iostream>

// cv support
#include <opencv2\core\core.hpp>
#include <opencv2\imgproc\imgproc.hpp>
#include <opencv2\highgui\highgui.hpp>

using namespace std;
using namespace cv;

int _threshold = 180;

int main(int argc, char** argv){
    cv::Mat isrc = cv::imread("object.png");
    cv::Mat igray;
    cv::Mat ithreshold; 
    cv::Mat icontour;

    cv::cvtColor(isrc, igray, CV_BGR2GRAY);
    cv::threshold(igray, ithreshold, _threshold, 255, cv::THRESH_BINARY_INV);

    // segment by contour
    std::vector<std::vector<cv::Point>> contours;
    cv::findContours(ithreshold, contours, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, cv::Point(0,0));

    // check, have a segment ?
    if(contours.size()){
        for(int i=0;i<(int)contours.size();i++){
            for(int j=0;j<(int)contours[i].size();j++){
                cv::circle(isrc, contours[i][j], 5, Scalar(0,0,255));


            }
        }
    }

    cv::imshow("source" , isrc);
    cv::imshow("gray", igray);
    cv::imshow("threshold", ithreshold);
    cv::waitKey(0);

    return 0;
}

这段代码的结果在图片中。我必须分割圆和五边形。并用矩形裁剪它。 运行的结果 我有 2 个问题 1)如何找到最大轮廓?2)如何使用此代码的最大轮廓图像中的黑色矩形进行裁剪?

最好的感谢主席

4

1 回答 1

0

您可以检查contourArea()以找到最大的,然后取boundingRect并裁剪它

Rect br = boundingRect(countours[i]);
Mat cropped = Mat( isrc, br );
于 2013-10-20T09:52:52.323 回答