如何寻找第二大轮廓

简介: 在有背景的图像处理中,往往你关注的区域并不是最大的轮廓(那是背景),而是第二大轮廓之前我们有这样的函数://寻找最大的轮廓    VP FindBigestContour(Mat src){            int imax = 0; //代表最大轮廓的序号        int ima...
在有背景的图像处理中,往往你关注的区域并不是最大的轮廓(那是背景),而是第二大轮廓

之前我们有这样的函数:
//寻找最大的轮廓
    VP FindBigestContour(Mat src){    
        int imax = 0//代表最大轮廓的序号
        int imaxcontour = -1//代表最大轮廓的大小
        std::vector<std::vector<Point>>contours;    
        findContours(src,contours,CV_RETR_LIST,CV_CHAIN_APPROX_SIMPLE);
        for (int i=0;i<contours.size();i++){
            int itmp =  contourArea(contours[i]);//这里采用的是轮廓大小
            if (imaxcontour < itmp ){
                imax = i;
                imaxcontour = itmp;
            }
        }
        return contours[imax];
    }
使用的是冒泡方法。实际上vector肯定是可以有排序算法的,能否将其融入进去?
肯定是可以的,我采用了这样的方法,效果很好。
//寻找第nth的轮廓
    //ith = 0代表最大,ith=1 代表第2个,以此类推
    bool sortfunction (std::vector<Point> c1,std::vector<Point> c2) { return (contourArea(c1)>contourArea(c2)); }  
    VP FindnthContour(Mat src,int ith ){    
        std::vector<std::vector<Point>>contours;    
        findContours(src,contours,CV_RETR_LIST,CV_CHAIN_APPROX_SIMPLE);
        std::sort(contours.begin(),contours.end(),sortfunction);
        return contours[ith];
    }




目前方向:图像拼接融合、图像识别 联系方式:jsxyhelu@foxmail.com
目录
相关文章
|
6月前
|
索引
绘制轮廓
【6月更文挑战第25天】绘制轮廓。
64 1
|
6月前
|
Python
轮廓的矩
【6月更文挑战第25天】轮廓的矩。
37 1
|
6月前
|
索引 Python
轮廓的凸包
【6月更文挑战第11天】轮廓的凸包。
41 3
|
6月前
|
SDN Python
轮廓的近似多边形
【6月更文挑战第11天】轮廓的近似多边形。
47 4
|
6月前
|
Python
轮廓面积
【6月更文挑战第11天】轮廓面积。
35 3
|
6月前
|
计算机视觉
OpencV图像几何形状绘制
OpencV图像几何形状绘制
|
7月前
|
算法 Serverless 计算机视觉
【OpenCV】- 多边形将轮廓包围
【OpenCV】- 多边形将轮廓包围
|
7月前
|
存储 算法
轮廓发现
轮廓发现
39 5
|
7月前
|
计算机视觉
OpenCV(十三):图像中绘制直线、圆形、椭圆形、矩形、多边形和文字
OpenCV(十三):图像中绘制直线、圆形、椭圆形、矩形、多边形和文字
87 0
|
7月前
|
算法
[Halcon&拟合] 直线、矩形和圆的边缘提取
[Halcon&拟合] 直线、矩形和圆的边缘提取
412 0