http://blog.csdn.net/lu597203933/article/details/17362457

连通区域指的是二值图像中相连像素组成的形状。而内、外轮廓的概念及opencv1中如何提取二值图像的轮廓见我的这篇博客:http://blog.csdn.net/lu597203933/article/details/14489225

轮廓的简单提取算法如下:

系统性地扫描图像直到遇到连通区域的一个点,以它为起始点,跟踪它的轮廓,标记边界上的像素。当轮廓完整闭合,扫描回到上一个位置,直到再次发现新的成分。

代码:

  1. #include <iostream>
  2. #include <opencv2\core\core.hpp>
  3. #include <opencv2\highgui\highgui.hpp>
  4. #include <opencv2\imgproc\imgproc.hpp>
  5. using namespace std;
  6. using namespace cv;
  7. // 移除过小或过大的轮廓
  8. void getSizeContours(vector<vector<Point>> &contours)
  9. {
  10. int cmin = 100;   // 最小轮廓长度
  11. int cmax = 1000;   // 最大轮廓长度
  12. vector<vector<Point>>::const_iterator itc = contours.begin();
  13. while(itc != contours.end())
  14. {
  15. if((itc->size()) < cmin || (itc->size()) > cmax)
  16. {
  17. itc = contours.erase(itc);
  18. }
  19. else ++ itc;
  20. }
  21. }
  22. // 计算连通区域的轮廓,即二值图像中相连像素的形状
  23. int main()
  24. {
  25. Mat image = imread("E:\\opencv2cv\\lesson7\\Debug\\55.png",0);
  26. if(!image.data)
  27. {
  28. cout << "Fail to load image" << endl;
  29. return 0;
  30. }
  31. Mat imageShold;
  32. threshold(image, imageShold, 100, 255, THRESH_BINARY);   // 必须进行二值化
  33. vector<vector<Point>> contours;
  34. //CV_CHAIN_APPROX_NONE  获取每个轮廓每个像素点
  35. findContours(imageShold, contours, CV_RETR_CCOMP, CV_CHAIN_APPROX_NONE, cvPoint(0,0));
  36. getSizeContours(contours);
  37. cout << contours.size() << endl;
  38. Mat result(image.size(), CV_8U, Scalar(255));
  39. drawContours(result, contours, -1, Scalar(0), 2);   // -1 表示所有轮廓
  40. namedWindow("result");
  41. imshow("result", result);
  42. namedWindow("image");
  43. imshow("image", image);
  44. waitKey(0);
  45. return 0;
  46. }

结果:

未移除过大多小的轮廓前:

移除后:

Opencv2系列学习笔记10(提取连通区域轮廓) 另一个的更多相关文章

  1. Opencv2系列学习笔记10(提取连通区域轮廓)

    连通区域指的是二值图像中相连像素组成的形状.而内.外轮廓的概念及opencv1中如何提取二值图像的轮廓见我的这篇博客:http://blog.csdn.net/lu597203933/article/ ...

  2. Opencv2系列学习笔记2(图像的其它操作)

    本节主要涉及到图像的领域.算术操作以及如何操作图像感兴趣的区域. 一:邻域操作 以下例子主要对图像进行锐化.基于拉普拉斯算子<后面讨论>.这幅图像的边缘部分将得到放大,细节部分将更加的锐利 ...

  3. Opencv2系列学习笔记8(图像滤波)

    一:概念: 滤波是信号处理机图像处理中的一个基本操作.滤波去除图像中的噪声,提取感兴趣的特征,允许图像重采样. 图像中的频域和空域:空间域指用图像的灰度值来描述一幅图像:而频域指用图像灰度值的变化来描 ...

  4. opencv学习笔记(二)寻找轮廓

    opencv学习笔记(二)寻找轮廓 opencv中使用findContours函数来查找轮廓,这个函数的原型为: void findContours(InputOutputArray image, O ...

  5. OpenCV2学习笔记(十四):基于OpenCV卡通图片处理

    得知OpenCV有一段时间.除了研究的各种算法的内容.除了从备用,据导游书籍和资料,尝试结合链接的图像处理算法和日常生活,第一桌面上(随着摄像头)完成了一系列的视频流处理功能.开发平台Qt5.3.2+ ...

  6. OpenCV:二值图像连通区域分析与标记算法实现

    http://blog.csdn.net/cooelf/article/details/26581539?utm_source=tuicool&utm_medium=referral Open ...

  7. Java系列笔记(3) - Java 内存区域和GC机制

    目录 Java垃圾回收概况 Java内存区域 Java对象的访问方式 Java内存分配机制 Java GC机制 垃圾收集器 Java垃圾回收概况 Java GC(Garbage Collection, ...

  8. MVA Universal Windows Apps系列学习笔记1

    昨天晚上看了微软的Build 2015大会第一天第一场演讲,时间还挺长,足足3个小时,不过也挺震撼的.里面提到了windows 10.Microsoft edge浏览器.Azure云平台.Office ...

  9. 使用OpenCV查找二值图中最大连通区域

    http://blog.csdn.net/shaoxiaohu1/article/details/40272875 使用OpenCV查找二值图中最大连通区域 标签: OpenCVfindCoutour ...

随机推荐

  1. php专业面试总结

    PHP专业面试题汇总 一.PHP基础: 2 二.数据库部分 5 三.面向对象部分 9 四.ThinkPHP部分 12 五.smarty模板引擎 16 六.二次开发系统(DEDE.ecshop): 18 ...

  2. A*寻路算法 (cocos2d-js详细代码)

    看了几天的A*算法,感觉要成为一个游戏开发者,有必要把这个著名的算法拿到手. 网上有此算法的代码片段,但主要还是些模板类的伪代码,所以想分享一段完整的A*算法代码供大家更好的理解!(这里使用的是js语 ...

  3. &reg 不需要显示为商标符的做法

    若url中有参数reg,则把&reg 变为 &reg

  4. java练习 - 字符串反转

    思路: 1. 首先将字符串转换成数组,一个数组元素放一个字符. 2. 循环遍历字符串,将所有字符串前后字符调换位置,比如:第一个和最后一个调换,第二个和倒数第三调换,第三个和倒数第三调换,直到所有字符 ...

  5. C#变量修饰符

    访问修饰符 关键字包括:internal,public,protected和private,用于设置变量的访问级别.  public  变量可以做为它所属的类型的一个字段,可以在任何地方访问它.  i ...

  6. jQuery(6)——jQuery对表单、表格的操作及更多应用

    jQuery对表单.表格的操作及更多应用 [表单应用] 一个表单有表单标签.表单域及表单按钮三个基本部分. 单行文本框应用:获取和失去焦点改变样式. 也可以用CSS中的伪类选择符来实现,但是IE6并不 ...

  7. JAVA String 工具类

    java StringUtil 字符串工具类 import java.util.ArrayList; import java.util.LinkedHashSet; import java.util. ...

  8. 添加JUnit到Java Build Path

    1.第一种 新建项目,点击右键,选择properties->Java Build Path->Libraries->add library->JUnit->JUnit4- ...

  9. Struts2第四天

    Struts2第四天 昨天: 自定义的拦截器:继续methodFilterInterceptor,可以指定哪些方法需要拦截或者不拦截. Intercepters(配置拦截器),intercepter( ...

  10. iOS开发QQ空间半透明效果的实现

    //1.首先我们可以确定的是cell的半透明, /* white The grayscale value of the color object, specified as a value from ...