Opencv2系列学习笔记10(提取连通区域轮廓) 另一个
http://blog.csdn.net/lu597203933/article/details/17362457
连通区域指的是二值图像中相连像素组成的形状。而内、外轮廓的概念及opencv1中如何提取二值图像的轮廓见我的这篇博客:http://blog.csdn.net/lu597203933/article/details/14489225
轮廓的简单提取算法如下:
系统性地扫描图像直到遇到连通区域的一个点,以它为起始点,跟踪它的轮廓,标记边界上的像素。当轮廓完整闭合,扫描回到上一个位置,直到再次发现新的成分。
代码:
- #include <iostream>
- #include <opencv2\core\core.hpp>
- #include <opencv2\highgui\highgui.hpp>
- #include <opencv2\imgproc\imgproc.hpp>
- using namespace std;
- using namespace cv;
- // 移除过小或过大的轮廓
- void getSizeContours(vector<vector<Point>> &contours)
- {
- int cmin = 100; // 最小轮廓长度
- int cmax = 1000; // 最大轮廓长度
- vector<vector<Point>>::const_iterator itc = contours.begin();
- while(itc != contours.end())
- {
- if((itc->size()) < cmin || (itc->size()) > cmax)
- {
- itc = contours.erase(itc);
- }
- else ++ itc;
- }
- }
- // 计算连通区域的轮廓,即二值图像中相连像素的形状
- int main()
- {
- Mat image = imread("E:\\opencv2cv\\lesson7\\Debug\\55.png",0);
- if(!image.data)
- {
- cout << "Fail to load image" << endl;
- return 0;
- }
- Mat imageShold;
- threshold(image, imageShold, 100, 255, THRESH_BINARY); // 必须进行二值化
- vector<vector<Point>> contours;
- //CV_CHAIN_APPROX_NONE 获取每个轮廓每个像素点
- findContours(imageShold, contours, CV_RETR_CCOMP, CV_CHAIN_APPROX_NONE, cvPoint(0,0));
- getSizeContours(contours);
- cout << contours.size() << endl;
- Mat result(image.size(), CV_8U, Scalar(255));
- drawContours(result, contours, -1, Scalar(0), 2); // -1 表示所有轮廓
- namedWindow("result");
- imshow("result", result);
- namedWindow("image");
- imshow("image", image);
- waitKey(0);
- return 0;
- }
结果:
未移除过大多小的轮廓前:
移除后:
Opencv2系列学习笔记10(提取连通区域轮廓) 另一个的更多相关文章
- Opencv2系列学习笔记10(提取连通区域轮廓)
连通区域指的是二值图像中相连像素组成的形状.而内.外轮廓的概念及opencv1中如何提取二值图像的轮廓见我的这篇博客:http://blog.csdn.net/lu597203933/article/ ...
- Opencv2系列学习笔记2(图像的其它操作)
本节主要涉及到图像的领域.算术操作以及如何操作图像感兴趣的区域. 一:邻域操作 以下例子主要对图像进行锐化.基于拉普拉斯算子<后面讨论>.这幅图像的边缘部分将得到放大,细节部分将更加的锐利 ...
- Opencv2系列学习笔记8(图像滤波)
一:概念: 滤波是信号处理机图像处理中的一个基本操作.滤波去除图像中的噪声,提取感兴趣的特征,允许图像重采样. 图像中的频域和空域:空间域指用图像的灰度值来描述一幅图像:而频域指用图像灰度值的变化来描 ...
- opencv学习笔记(二)寻找轮廓
opencv学习笔记(二)寻找轮廓 opencv中使用findContours函数来查找轮廓,这个函数的原型为: void findContours(InputOutputArray image, O ...
- OpenCV2学习笔记(十四):基于OpenCV卡通图片处理
得知OpenCV有一段时间.除了研究的各种算法的内容.除了从备用,据导游书籍和资料,尝试结合链接的图像处理算法和日常生活,第一桌面上(随着摄像头)完成了一系列的视频流处理功能.开发平台Qt5.3.2+ ...
- OpenCV:二值图像连通区域分析与标记算法实现
http://blog.csdn.net/cooelf/article/details/26581539?utm_source=tuicool&utm_medium=referral Open ...
- Java系列笔记(3) - Java 内存区域和GC机制
目录 Java垃圾回收概况 Java内存区域 Java对象的访问方式 Java内存分配机制 Java GC机制 垃圾收集器 Java垃圾回收概况 Java GC(Garbage Collection, ...
- MVA Universal Windows Apps系列学习笔记1
昨天晚上看了微软的Build 2015大会第一天第一场演讲,时间还挺长,足足3个小时,不过也挺震撼的.里面提到了windows 10.Microsoft edge浏览器.Azure云平台.Office ...
- 使用OpenCV查找二值图中最大连通区域
http://blog.csdn.net/shaoxiaohu1/article/details/40272875 使用OpenCV查找二值图中最大连通区域 标签: OpenCVfindCoutour ...
随机推荐
- sybase 修改用户密码
命令行输入 isql -Usa -P123456 将sa口令设置为NULL(当前口令为"123456"): sp_password '123456',NULL,sa
- Dubbo.xml配置源-Dubbo.xsd分析
我们使用Dubbo时,一般都会使用xml配置基本信息,如项目名称(application).注册中心(register).协议(protocal).服务(service),如下所示: 1 2 3 ...
- Linux服务器时间设置命令
hwclock -r # 读取BIOS 时间 hwclock -w # 将当前系统时间写入BIOS date -s 2010/10/02 # 设置年月日 date -s 15: ...
- hdu1002
//c//https://github.com/ssdutyuyang199401/hduacm/blob/master/1002.c#include<stdio.h>#include&l ...
- 关于对象存入NSUserDefaults
#import <Foundation/Foundation.h> @interface Student : NSObject <NSCoding> @property (no ...
- JS复习:第二十三章
一.Cookie的构成: 1.名称:一个唯一确定cookie的名称.cookie名称不区分大小写,必须是经过URL编码的. 2.值:存储在cookie中的字符串值,必须被URL编码. 3.域:cook ...
- jQuery第四章
jQuery中的事件和动画 一.jQuery中的事件 1.加载DOM (1)执行时机 $(document).ready()方法和window.onload方法有相似的功能,但是在执行时机方面是有区别 ...
- C socket指南
1.介绍 Socket 编程让你沮丧吗?从man pages中很难得到有用的信息吗?你想跟上时代去编Internet相关的程序,但是为你在调用 connect() 前的bind() 的结构而不知所措? ...
- POJ 2311 Cutting Game(SG+记忆化)
题目链接 #include<iostream> #include<cstdio> #include<cstring> using namespace std; ][ ...
- MVC3+EF4.1学习系列(四)----- ORM关系的处理
上篇文章 终于把基础的一些操作写完了 但是这些都是单表的处理 而EF做为一个ORM框架 就必须点说说对于关系的处理 处理好关系 才能灵活的运用EF 关于关系的处理 一般就是 一对一 一对多 ...