对轮廓和相关层次结构进行排序

时间:2015-05-25 16:31:26

标签: c++ sorting opencv stdvector

我正在使用OpenCV生成和排序轮廓。我需要按区域及其相关层次结构(CV_RETR_TREE)对轮廓进行排序。我已经设法使用std :: sort方法优雅地对轮廓进行排序,但是,由于层次结构和轮廓不存储记录号(据我所知),我无法找到将两个数据库关联在一起进行排序的方法。所以这意味着在对轮廓进行排序后,我的层次结构变得无效在排序之前,我显然可以使用记录号填充其他数据库,但是有人可以建议更好的解决方案吗?

搜索网络毫无结果,因为OpenCV轮廓的每个结果实际上也包含层次结构。

void myContourFunction(Mat srcImage) {

    vector<Vec4i> hierarchy;
    vector<vector<cv::Point> > contours;

    findContours(srcImage, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_NONE, cv::Point(0,0));
    vector<vector<cv::Point> > contoursPoly( contours.size() );

    for( int i = 0; i < numberContours; i++ ) {
            approxPolyDP( Mat(contours[i]), contoursPoly[i], 0.8, true );
    }

    std::sort(contoursPoly.begin(), contoursPoly.end(), compareContourAreas);
}

bool compareContourAreas ( std::vector<cv::Point> contour1, std::vector<cv::Point> contour2 ) {
    double i = fabs( contourArea(cv::Mat(contour1)) );
    double j = fabs( contourArea(cv::Mat(contour2)) );
    return ( i < j );
}

0 个答案:

没有答案
相关问题