寻找轮廓
2015-10-20 21:00
190 查看
轮廓到底是什么?一个轮廓一般对应一系列的点,也就是图像中的一条曲线.表示的方法可能根据不同情况而有所不同.有多重方法可以表示曲线.在openCV中一般用序列来存储轮廓信息.序列中的每一个元素是曲线中一个点的位置.关于序列表示的轮廓细节将在后面讨论,现在只要简单把轮廓想象为使用CvSeq表示的一系列的点就可以了.
第一函数是cvFindContours(),在前面已经提到.接着是cvStartFindContiors()函数,它和cvFin的Contours()功能类似.但是cvStartFindContours()每次放回一个轮廓,而不像cvFinContours()那样一次查找所有轮廓然后统一返回.调用cvStartFindContours()函数后,返回一个CvSequenceScanner结构.CvSequenceScanner结构中包含一些状态信息,这些信息不可读.你可以通过在cvSequenceScabber结构上依次调用cvFinNextContour()来查找剩余的轮廓.当全部轮廓都被找完之后,cvFindNextContour()将放回NULL
cvSubstituteContour()函数用于替换scanner指向的轮廓.该函数的一个特性是,如果参数 new_contour为NULL,那么当前的轮廓将被从Scanner指定的树或链表中删除(受影响的序列会作适当更新,来保证不会有指针指向不存在的物体).
函数cvEndFindContour()结束轮廓查找,并且将scanner设置为结束状态.注意,scanner并没有被删除,实际上该函数返回的是指针所指序列的第一个元素.
最后一个函数cvApproxChains()函数.该函数将Freeman链转换为多边形表示(精确转换或者近似拟合).
第一函数是cvFindContours(),在前面已经提到.接着是cvStartFindContiors()函数,它和cvFin的Contours()功能类似.但是cvStartFindContours()每次放回一个轮廓,而不像cvFinContours()那样一次查找所有轮廓然后统一返回.调用cvStartFindContours()函数后,返回一个CvSequenceScanner结构.CvSequenceScanner结构中包含一些状态信息,这些信息不可读.你可以通过在cvSequenceScabber结构上依次调用cvFinNextContour()来查找剩余的轮廓.当全部轮廓都被找完之后,cvFindNextContour()将放回NULL
cvSubstituteContour()函数用于替换scanner指向的轮廓.该函数的一个特性是,如果参数 new_contour为NULL,那么当前的轮廓将被从Scanner指定的树或链表中删除(受影响的序列会作适当更新,来保证不会有指针指向不存在的物体).
函数cvEndFindContour()结束轮廓查找,并且将scanner设置为结束状态.注意,scanner并没有被删除,实际上该函数返回的是指针所指序列的第一个元素.
最后一个函数cvApproxChains()函数.该函数将Freeman链转换为多边形表示(精确转换或者近似拟合).
相关文章推荐
- 全排列的四种生成算法
- 为什么我们需要数学
- oracle pl/sql之sql中的---if语句
- sprintf函数可能会造成由buf指向的缓冲区的溢出
- 五、线程通信
- 天声人語 20151020 知られざる蕪村句
- [Servlet]HelloServlet示例:Servlet的基本元素
- Python函数_参数类型
- name_save matlab
- awk使用shell中的变量
- hibernate 一对多 多对一 关系的理解
- 批处理(.bat)For命令使用
- ELKStack读取Syslog数据
- noipday3提高组模拟题————解题报告
- torch学习(四) using GPU
- Fedora9.0安装VMwareTools遇到的问题
- dedecms搜索框制作
- poj The Bottom of a Graph 2553 (强连通分量 找出汇点并输出汇点号)
- Android视频播放---VideoView
- ireport3.7导出报表报异常:Error retrieving field value from bean :XX ;NoSuchMetho dException:Unknown proper