Qt 5 OpenCV C++ 提取图像中面积最大的轮廓

参考:https://blog.csdn.net/qq_39197555/article/details/108997933

1. 使用cv::findContours() 进行二值图像的轮廓寻找

    其参数如下:

RETR_EXTERNAL 输出轮廓中只有外侧轮廓信息
RETR_LIST 以列表形式输出轮廓信息,各轮廓之间无等级关系
RETR_CCOMP 输出两层轮廓信息,即内外两个边界
RETR_TREE 以树形结构输出轮廓信息
CHAIN_APPROX_NONE 存储轮廓所有点的信息,相邻两个轮廓点在图象上也是相邻的
CHAIN_APPROX_SIMPLE 压缩水平方向,垂直方向,对角线方向的元素,只保留该方向的终点坐标
CHAIN_APPROX_TC89_L1 使用teh-Chinl chain 近似算法保存轮廓信息

2. 使用cv::contourArea() 进行轮廓面积计算

.cpp

cv::Mat mat = cv::imread("PATH");

std::vector< std::vector  > contours; //轮廓集
std::vector< cv::Point > contour; //最终轮廓
std::vector hierarchy; //层级

cv::findContours(mat, contours, hierarchy, CV_RETR_CCOMP, CV_CHAIN_APPROX_TC89_KCOS);

if(contours.empty()){
    //打印错误信息
    return;
}

// 寻找面积最大的轮廓
unsigned long long max_contour = 0;
double max_area = cv::contourArea(cv::InputArray(contours[0]), false);
    
for(unsigned long long i = 1; i < contours.size(); i++){
    double temp_area = cv::contourArea(cv::InputArray(contours[i]), false);
    if(max_area < temp_area){
        max_area = temp_area;
        max_contour = i;
    }
}
    
contour = contours[max_contour];

 

你可能感兴趣的:(Qt,c++,opencv,qt5)