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. centos7下用yum安装mysql5.7

    1.安装mysql源 下载地址:http://dev.mysql.com/downloads/repo/yum/ 下载之后用yum安装:yum localinstall -y xx.noarch.rp ...

  2. Users is not mapped(Hibernate实体类采用注解)

    今天做简单的登陆验证web应用时,用HQL语句查询数据表时 总是出现Users is not mapped [from Users u where u.username=? and u.passwor ...

  3. pre标签

    $(" .pop-info").html("<PRE>"+data.info+"<PRE>"): 数据库里的换行存的 ...

  4. linux卸载rpm包

    先查找要卸载的rpm包:比如cpp: #rpm -qa | grep cpp #rpm -e cpp-2.333x.x 如果提示有依赖,执行: #rpm -e cpp-2222 --nodeps

  5. python网络编程之网络主机信息

    功能: 获取设备名称 方法: gethostname() 参数: 返回值:hostname(string) 功能: 获取设备ipv4地址 方法: gethostbyname() 参数: hostnam ...

  6. alibaba远程调用框架dubbo原理

    alibaba有好几个分布式框架,主要有:进行远程调用(类似于RMI的这种远程调用)的(dubbo.hsf),jms消息服务(napoli.notify),KV数据库(tair)等.这个框架/工具/产 ...

  7. 深耕教育行业,RealSeer联合黑晶科技发布“AR超级教室”

    近日,RealSeer开发者大赛见面会最后一站在北京举行,现场云集了不少AR创业者和开发者,各位大咖嘉宾都拿出干货与大家分享交流,公话未来AR行业发展趋势.现场RealMax联合黑晶科技发布了新品&q ...

  8. Node.js:回调函数

    概要:本篇博客主要通过对比node.js异步与同步方式读取文件的方式来解释node中回调函数的作用. 1.异步方式读取文件: 新建一个文本文档用于测试,如下图: 代码如下: // node异步方式读取 ...

  9. MongoDB数据库基本操作

    一.使用数据库 显示所有数据库命令 $ ./mongo MongoDB shell version: connecting to: test > show dbs local .078GB te ...

  10. Nimbus<一>Storm系列(五)架构分析之Nimbus启动过程

    启动流程图 mk-assignments 功能:对当前集群中所有Topology进行新一轮的任务调度. 实现源码路径: \apache-storm-0.9.4\storm-core\src\clj\b ...