一、相关函数

  public static void cvDrawContours(

      IntPtr img,

      IntPtr contour,

      MCvScalar externalColor,

      MCvScalar holeColor,

      int maxLevel,

      int thickness,

      Emgu.CV.CvEnum.LINE_TYPE lineType,  //EIGHT_CONNECTED、FOUR_CONNECTED、CV_AA

      System.Drawing.Point offset

  )

  cvDrawContours函数在图像上画出轮廓,其中external_color指定外围轮廓的颜色,hole_color指定内部轮廓的颜色(孔),max_level是一个比较关键的参数,也比较难理解,它指定被画的轮廓的最大层数,等于0时只画出第一个轮廓,等于1时画出第一个轮廓以及在它后面的同一层所有的轮廓,等于2时下一层的轮廓也被画出来,以此类推。当max_level为负数时,同一层的轮廓不会被画出来,而是画出contour(当前轮廓)直至|max_level|-1层的子轮廓(特殊情况:当max_level = -1时,只画出当前轮廓)。

  offsetType: Shift all the point coordinates by the specified value. It is useful in case if the contours retrived in some image ROI and then the ROI offset needs to be taken into account during the rendering.

  public static int cvFindContours(

      IntPtr image,  //8位单通道图像,Non-zero pixels are treated as 1s, zero pixels remain 0s - that is image treated as binary. To get such a binary image from grayscale, one may use cvThreshold, cvAdaptiveThreshold or cvCanny. The function modifies the source image content

      IntPtr storage,   //Container of the retrieved contours

      ref IntPtr firstContour,  //Output parameter, will contain the pointer to the first outer contour

      int headerSize,   //Size of the sequence header, >=sizeof(CvChain) if method=CV_CHAIN_CODE, and >=sizeof(CvContour) otherwise

      RETR_TYPE mode,   //检索模式,可取值:CV_RETR_EXTERNAL、CV_RETR_LIST、CV_RETR_CCOMP、CV_RETR_TREE

      Emgu.CV.CvEnum.CHAIN_APPROX_METHOD method,   //优化方法,可取值:CV_CHAIN_CODE、CV_CHAIN_APPROX_NONE、CV_CHAIN_APPROX_SIMPLE、CV_CHAIN_APPROX_TC89_L1、CV_CHAIN_APPROX_TC89_KCOS、CV_LINE_RUNS

      System.Drawing.Point offset   //Offset, by which every contour point is shifted. This is useful if the contours are extracted from the image ROI and then they should be analyzed in the whole image context.

  )

二、一个例子

   private void test(Image<Gray, byte> src)

{

CvInvoke.cvThreshold(src, src, 50, 250, Emgu.CV.CvEnum.THRESH.CV_THRESH_OTSU);

Image<Gray, byte> dst = new Image<Gray, byte>(src.Size);//存储最终结果图像

IntPtr Dyncontour = new IntPtr();//存放检测到的图像块的首地址

    IntPtr Dynstorage = CvInvoke.cvCreateMemStorage(0);//开辟内存区域

    int m = 88;//在不安全处理下获取的数据

int n = CvInvoke.cvFindContours(src, Dynstorage, ref Dyncontour, m, Emgu.CV.CvEnum.RETR_TYPE.CV_RETR_LIST, Emgu.CV.CvEnum.CHAIN_APPROX_METHOD.CV_CHAIN_APPROX_NONE, new Point(1, 1));

    Seq<Point> DyncontourTemp1 = new Seq<Point>(Dyncontour, null);//方便对IntPtr类型进行操作

    Seq<Point> DyncontourTemp = DyncontourTemp1;

for (; DyncontourTemp1 != null && DyncontourTemp1.Ptr.ToInt32() != 0; DyncontourTemp1 = DyncontourTemp1.HNext)

     {

       CvInvoke.cvDrawContours(dst, DyncontourTemp1, new MCvScalar(128, 128, 128), new MCvScalar(255, 255, 255), 0, 1, Emgu.CV.CvEnum.LINE_TYPE.CV_AA, new Point(0, 0));

    }

    pictureBox2.Image = dst.ToBitmap();  //显示出来

  }

EmguCV 轮廓的更多相关文章

  1. EmguCV 轮廓匹配

    一.相关类 MCvMoments inv_sqrt_m00 m00!=0?1/sqrt(m00):0 m00  spatial moments m01, m02, m03, m10, m11 m12, ...

  2. EmguCV 轮廓分析函数汇总

    一.cvApproxPoly 使用多边形逼近一个轮廓,使得顶点数目变少.算法先从轮廓选择2个最远的点,然后将2个连成一个线段,然后再查找轮廓上到线段距离最远的点,添加到逼近后的新轮廓.算法反复迭代,不 ...

  3. Emgucv使用中常用函数总结

    Emgucv常用函数总结: 读取图片 Mat SCr = new Mat(Form1.Path, Emgu.CV.CvEnum.LoadImageType.AnyColor); //根据路径创建指定的 ...

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

    http://www.cnblogs.com/xrwang/archive/2010/02/09/HowToUseContour.html 作者:王先荣 前言    轮廓是构成任何一个形状的边界或外形 ...

  5. 机械手相机9点坐标标定-基于C#+EmguCV

    很多初学者,都对标定概念模糊不清,分不清坐标系之间的关系,搞不清相机标定和机械手相机标定有什么关系,想当初自己也是一个人摸索了很久,本文将尽量给大家解释. 我们通常所说的相机标定分为两种,一种是相机参 ...

  6. EmguCV常用函数总结

    Emgucv常用函数总结: 读取图片 Mat SCr = new Mat(Form1.Path, Emgu.CV.CvEnum.LoadImageType.AnyColor); //根据路径创建指定的 ...

  7. opecv获取图像轮廓

    获取轮廓 #import <opencv2/opencv.hpp> #import <opencv2/imgcodecs/ios.h> #import <opencv2/ ...

  8. W3School-CSS 轮廓(Outline)实例

    CSS 轮廓(Outline)实例 CSS 实例 CSS 背景实例 CSS 文本实例 CSS 字体(font)实例 CSS 边框(border)实例 CSS 外边距 (margin) 实例 CSS 内 ...

  9. 简易的轮廓边生成(N和V dot点乘方式)(surface方式和vs ps 方式的分别实现)

    一.前面心情 1.公司我的架构发生变动,从技术中心到项目组了,但不管怎么样,该看的还要看,总会用到 二.实现 三.参考: http://blog.csdn.net/cubesky/article/de ...

随机推荐

  1. express-20 REST API和JSON

    简介 "Web服务"是一个通用术语,指任何可以通过HTTP访问的应用程序编程界面(API); 我们的重点是提供"REST风格"的服务,与其交互要更直接得多. R ...

  2. 分享Kali Linux 2016.2第48周镜像文件

    分享Kali Linux 2016.2第48周镜像文件Kali Linux官方于11月27日发布Kali Linux 2016.2的第48周镜像.这次延续以往规律,仍然是11个镜像文件.默认的Gnom ...

  3. zookeeper 3.4.6启动流程粗略梳理

    zookeeper 3.4.6 启动脚本里面 nohup "$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" " ...

  4. BNUOJ48605International Collegiate Routing Contest 题解

    题目大意: 给你一些子网,求它们在整个网段的补集. 思路: 将子网转换成二进制建一棵Trie,直接DFS搜到没有了就记下来输出.注意:所给的子网会有交集,若搜到结尾就不向下搜了. 代码: #inclu ...

  5. android-async-http cancelRequests

    github地址:https://github.com/loopj/android-async-http 使用上:官方建议使用一个静态的AsyncHttpClient: 1.AsyncHttpClie ...

  6. [Java] 利用LinkedHashMap来实现LRU Cache

    http://www.acmerblog.com/leetcode-lru-cache-lru-5745.html https://oj.leetcode.com/discuss/1188/java- ...

  7. Java中集合Set的用法

    转载 http://blog.163.com/asd_wll/blog/static/210310402010112833332260/ 1.HashSet类 Java.util.HashSet类实现 ...

  8. 【POJ】3071 Football

    http://poj.org/problem?id=3071 题意:2^n支队伍进行淘汰赛,每一轮都是第一个与第二个,第三个与第四个比赛,给出了这些人之间的胜率,赢了的进入下一轮,相对位置不变.一共n ...

  9. PHP面向对象学习二

    类的继承和应用 继承关键字:extends class1 --extends--->class2 ----extends-->class3 依次被继承,class3拥有class1.cla ...

  10. C语言(2)

    C语言(2)---变量 基本格式: 变量类型  变量名1[,变量名2,变量名3,...变量名n]: 注意: 1.在C语言中如果申请一个变量,里面存放小数,则用float表示,且在输出时需要注意prin ...