最大轮廓和投影 转

转自:http://www.opencv.org.cn/forum.php?mod=viewthread&tid=37839&page=1

最大轮廓和投影
    
    最近非常多的用到了最大轮廓和投影运算。回想起来,这两种算法的确是属于非常常见的基础算法。这里加以总结和提取。
      最大轮廓:
      前提是图像经过了灰度和阈值处理,也可以直接处理canny的结果,有些时候需要预先经过色彩域的转换。最后得到的结果,应该是一个contour,当然可以采用一定的方法处理得到外接矩形。
//寻找最大的轮廓
vector<cv:Point> FindBigestContour(Mat src)
{    
    int imax = 0; //代表最大轮廓的序号
    int imaxcontour = -1; //代表最大轮廓的大小
    std::vector<std::vector<cv: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];
}
调用方法,得到外接矩阵
                   Rect boundRect = boundingRect(Mat(FindBigestContour(canny)));
     投影处理:
     这里的前提和最大轮廓是非常相似的。投影主要关心的是通过投影图像,获得原始图像中的ROI,或者获得有多少个上波形多少个下波形这些定量的结果。

Vector<int> vectorV; //横向循环
    Vector<int> vectorH; //纵向循环
    Vector<int> VUpper;
    Vector<int> VDown;
    vector<int> HUpper;
    vector<int> HDower;

// 做横向循环
    for (int i=0;i<ostu.cols;i++)
    {
        Mat data = ostu.col(i);
        int itmp = countNonZero(data);
        vectorV.push_back(itmp);
    }
    //上波形为VUpper,下波形为VDown
    for (int i=1;i<vectorV.size();i++)
    {
        if (vectorV[i-1] == 0 && vectorV[i]>0)
        {
            VUpper.push_back(i);
        }
        if (vectorV[i-1]>0 && vectorV[i] == 0)
        {
            VDown.push_back(i);
        }
    }
    //做纵向循环,这个往往处理的是横向循环的结果图片
      for (int j=0;j<ostu.rows;j++)
        {
            Mat data = roitmp.row(j);
            int itmp = countNonZero(data);
            vectorH.push_back(itmp);
        }
        for (int j=0;j<vectorH.size()-1;j++)
        {   
            if (vectorH[j]>0 && vectorH[j+1] == 0)
            {
                HDower.push_back(j);
            }
            if (vectorH[j] == 0 && vectorH[j+1]>0)
            {
                HUpper.push_back(j);
            }
        }

//由于处理的上波形和下波形可能会有问题,需要进行一定的处理
     //这里的一个处理就是提出哪些短暂的空白区域
    for (int j=0;j<HDower.size()-1;j++)
            {
                //得出之间空白的区域
                int iwidth = HUpper[j+1] - HDower[j];
                if (iwidth > 10)
                {
                    iresult = iresult +1;
                }
            }

时间: 2024-09-27 01:20:21

最大轮廓和投影 转的相关文章

[blog 机器视觉]最大轮廓和投影

最大轮廓和投影 最近非常多的用到了最大轮廓和投影运算.回想起来,这两种算法的确是属于非常常见的基础算法.这里加以总结和提取. 最大轮廓: 前提是图像经过了灰度和阈值处理,也可以直接处理canny的结果,有些时候需要预先经过色彩域的转换.最后得到的结果,应该是一个contour,当然可以采用一定的方法处理得到外接矩形. //寻找最大的轮廓vector<cv::Point> FindBigestContour(Mat src){        int imax = 0; //代表最大轮廓的序号  

[转载]转载,opencv轮廓查找,匹配以及特征提取,实例

已有 9450 次阅读 2012-3-15 20:50 |系统分类:科研笔记|关键词:opencv 轮廓 轮廓的查找.表达.绘制.特性及匹配(How to Use Contour? Find, Component, Construct, Features & Match) 作者:王先荣 前言    轮廓是构成任何一个形状的边界或外形线.前面讲了如何根据色彩及色彩的分布(直方图对比和模板匹配)来进行匹配,现在我们来看看如何利用物体的轮廓.包括以下内容:轮廓的查找.表达方式.组织方式.绘制.特性.匹

地图投影系列介绍(四)----投影坐标系

4.4 我国常用地图投影  我国基本比例尺地形图(1:100万.1:50万.1:25万.1:10万.1:5万.1:2.5万.1:1万.1:5000)除1:100万以外均采用高斯-克吕格Gauss-Kruger投影(横轴等角切圆柱投影,又叫横轴墨卡托Transverse Mercator投影)为地理基础.  1:100万地形图采用兰伯特Lambert投影(正轴等角割圆锥投影),其分幅原则与国际地理学会规定的全球统一使用的国际百万分之一地图投影保持一致.  海上小于50万的地形图多用墨卡托Me

边框阴影与轮廓

本文介绍如何给<div>标签以及图像添加阴影效果,用户还可以给网页中一些元素添加轮廓效果. box-shadow属性是给对象实现图层阴影效果. box-shadow: 投影方式  X轴偏移量  Y轴偏移量  阴影模糊半径  阴影拓展半径  阴影颜色; 投影方式  此参数是一个可选值,如果不设值,其默认的投影方式是外阴影:如果取其唯一值"inset",就是将外阴影变成内阴影. X轴偏移量  指阴影水平偏移量,其值如果为正值,则阴影在对象的右边:反之为负值,阴影在对象的左边.

利用Kinect将投影变得可直接用手操控

Finally 总算是到了这一天了!假期里算法想不出来,或者被BUG折磨得死去活来的时候,总是YY着什么时候能心情愉快地坐在电脑前写一篇项目总结,今天总算是抽出时间来总结一下这神奇的几个月. 现在回过头来看,上学期退出ACM集训队果然是对的,这次开发学到的东西太多太多,以前在ACM的时候,感觉不会的东西好多啊,真正来自己试着开发个东西,发现不会的东西果然好多.不过要是几个老师知道我上午给新生做完ACM宣讲报告下午就跟教练说退出,他们会是什么心情啊哈哈. 这些是第一次尝试开发,如果ACM是练内功的

uva 1017 - Merrily, We Roll Along!(几何线性轮廓)

题目链接:uva 1017 - Merrily, We Roll Along! 将所有点依次连接起来形成一条曲线,圆心移动的轨迹其实就是一条时刻与它距离为r的曲线. 对于线段就是平移,对于点就是一个圆.要求的轨迹其实就是所有线段和圆的轮廓,所以从起始位置开始,每次暴力出下一要移动到的点,距离就是最终的和. 对于从圆上的点A移动到线段或是圆上的点B,角AOB(O为圆心)要尽量小. 对于从线段上的点A移动到线段或是圆上的点B,AB的距离要尽量小. #include <cstdio> #includ

轮廓的查找、表达、绘制、特性及匹配(How to Use Contour? Find, Component, Construct, Features &amp; Match)

http://www.cnblogs.com/xrwang/archive/2010/02/09/HowToUseContour.html 作者:王先荣 前言    轮廓是构成任何一个形状的边界或外形线.前面讲了如何根据色彩及色彩的分布(直方图对比和模板匹配)来进行匹配,现在我们来看看如何利用物体的轮廓.包括以下内容:轮廓的查找.表达方式.组织方式.绘制.特性.匹配. 查找轮廓    首先我们面对的问题是如何在图像中找到轮廓,OpenCv(EmguCv)为我们做了很多工作,我们的任务只是调用现成

2018智能无屏电视(智能投影)哪个好

为大家盘点几款智能投影仪,包括极米Z4极光.坚果G1.小帅UFO未来版.神画Y1.酷乐视X5.我们选取的这几款智能投影硬件配置基本相当,我们就来看看这几款智能投影到底表现如何? 我们主要从公司背景.产品外观.参数.散热.画质亮度表现为大家进行分析: 公司背景 极米科技: 成都市极米科技有限公司成立于2013年11月,极米科技是专注于智能微投的创新型企业,致力于巨幕无屏超级电视的研发,支持1080P.4k的高清画质,定位于便携式无屏电视. 火乐科技: 深圳市火乐科技发展有限公司成立于2011年,是

建筑物轮廓\自然保护区\城市AOI\水土保持\水资源\水文\建成区\生态功能分区矢量数据shptabdwgcdr

一.城市建筑物轮廓 城市建筑物轮廓表示为每个建筑物的屋顶数.面,可以建立各建筑物的屋顶高程或各建筑物距地面的高度. 目前建筑物平面数据获取只要有以下几种方式: (1)从原有的二维 GIS中提取三维建筑物模型所平面信息,二维 GIS 中,建筑物一般只用投影到地面的轮廓线来表达,并将该轮廓线所勾勒出来的图形作为面对象存储在地图数据中.二维 GIS 中的建筑物轮廓面数据可以作为三维建筑物模型的底面:也可以根据建模的需求把面数据转换成线数据来获取建筑物轮廓线.利用原有GIS 成果的基础上,很容易获取三维