opencv2中寻找轮廓
2016-05-14 23:46
369 查看
最近想尝试用opencv做项目,发现需要考虑的细节很多,用商业库用习惯了,有点不适应,慢慢来吧。
上网查了查用opencv做连通域运算,发现都是先寻找轮廓,那就先来学习下轮廓。
opencv中寻找轮廓的c++函数是
void findContours(InputOutputArray image,
OutputArrayOfArrays contours, OutputArray hierarchy, int mode,
int method, Point offset=Point()),总共6个参数:
1、InputOutputArray image:源图像,8bit单通道,非0像素认为是1。
2、OutputArrayOfArrays contours:检测到的轮廓,每个轮廓以点矢量保存。
3、OutputArray hierarchy:可选的输出矢量,保存轮廓的拓扑结构。它的元素个数等于轮廓个数。对于每一个轮廓contour[i],hierarchy[i][0]对应于同层级下一个轮廓索引 , hiearchy[i][1]对应于同层级前一个轮廓的索引 , hiearchy[i][2]对应于第一个子轮廓索引 ,hiearchy[i][3]对应于父轮廓的索引。如果contour[i]没有父轮廓,那么hiearchy[3]为负,hiearchy[0~2]一样。
4、int mode:轮廓检索模式。
CV_RETR_EXTERNAL:只检索最外的轮廓。即内部子轮廓不检测。
CV_RETR_LIST:检索所有轮廓,但是不建立层级关系hierarchy。
CV_RETR_CCOMP:检索所有轮廓,组织为2级hierarchy。
CV_RETR_TREE:检索所有轮廓,并组织为树状,包括所有层级(hierarchy)。
示意图来自《学习opencv》
图1 黑背景白前景
图中最大的轮廓为c0,其内部包括两个孔洞h00,h01,孔洞内部又包括子轮廓和子孔洞c000,c010等,那么对应的四种mode如下图
图2
4中Mode模式
5、int method:轮廓近似模式。有三个可选项
CV_CHAIN_APPROX_NONE:存储几乎所有的轮廓点。
CV_CHAIN_APPROX_SIMPLE:压缩轮廓,只保存水平、垂直、倾斜部分的端点,也就是只保存角点。
CV_CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS:Teh-Chin链码近似算法,用到的时候在学吧。
6:、Point offset:可选项,表示每个轮廓点的偏移量。当使用ROI时,可以保持得到的轮廓点坐标和图像坐标系一致。
上网查了查用opencv做连通域运算,发现都是先寻找轮廓,那就先来学习下轮廓。
opencv中寻找轮廓的c++函数是
void findContours(InputOutputArray image,
OutputArrayOfArrays contours, OutputArray hierarchy, int mode,
int method, Point offset=Point()),总共6个参数:
1、InputOutputArray image:源图像,8bit单通道,非0像素认为是1。
2、OutputArrayOfArrays contours:检测到的轮廓,每个轮廓以点矢量保存。
3、OutputArray hierarchy:可选的输出矢量,保存轮廓的拓扑结构。它的元素个数等于轮廓个数。对于每一个轮廓contour[i],hierarchy[i][0]对应于同层级下一个轮廓索引 , hiearchy[i][1]对应于同层级前一个轮廓的索引 , hiearchy[i][2]对应于第一个子轮廓索引 ,hiearchy[i][3]对应于父轮廓的索引。如果contour[i]没有父轮廓,那么hiearchy[3]为负,hiearchy[0~2]一样。
4、int mode:轮廓检索模式。
CV_RETR_EXTERNAL:只检索最外的轮廓。即内部子轮廓不检测。
CV_RETR_LIST:检索所有轮廓,但是不建立层级关系hierarchy。
CV_RETR_CCOMP:检索所有轮廓,组织为2级hierarchy。
CV_RETR_TREE:检索所有轮廓,并组织为树状,包括所有层级(hierarchy)。
示意图来自《学习opencv》
图1 黑背景白前景
图中最大的轮廓为c0,其内部包括两个孔洞h00,h01,孔洞内部又包括子轮廓和子孔洞c000,c010等,那么对应的四种mode如下图
图2
4中Mode模式
5、int method:轮廓近似模式。有三个可选项
CV_CHAIN_APPROX_NONE:存储几乎所有的轮廓点。
CV_CHAIN_APPROX_SIMPLE:压缩轮廓,只保存水平、垂直、倾斜部分的端点,也就是只保存角点。
CV_CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS:Teh-Chin链码近似算法,用到的时候在学吧。
6:、Point offset:可选项,表示每个轮廓点的偏移量。当使用ROI时,可以保持得到的轮廓点坐标和图像坐标系一致。
相关文章推荐
- shell启动程序脚本
- openGL 环境配置
- python调用shell小技巧
- Linux下终端的快捷键及建立打开终端的快捷键
- hadoop 注解之 interfaceAudience interfaceStability
- iptables 添加,删除,查看,修改
- apache2.4 + mod_proxy + tomcat7 配置集群和负载均衡
- 转Linux下C编程实现之文件系统
- Linux stty命令
- Windows 8.1环境下安装Kali Linux 2016.1双系统
- linux设备号分配
- Linux查看磁盘块大小
- UBUNTU实战(5)
- tar、gzip、unzip命令的详细使用方法
- tomcat JVM 性能优化
- 利用Apache Ant编译Hadoop2.6.0-eclipse-plugin
- Linux Bash终端快捷键小结
- Linux下crontab命令详解
- Linux中常用操作命令
- Linux(CentOS)安装MySQL服务端