用多边形曲线逼近 Freeman 链
CvSeq* cvApproxChains( CvSeq* src_seq, CvMemStorage* storage, int method=CV_CHAIN_APPROX_SIMPLE, double parameter=0, int minimal_perimeter=0, int recursive=0 );
-
src_seq
- 涉及其它链的链指针 storage
- 存储多边形线段位置的缓存 method
- 逼近方法 (见函数 cvFindContours 的描述). parameter
- 方法参数(现在不用). minimal_perimeter
-
仅逼近周长大于
minimal_perimeter
轮廓。其它的链从结果中除去。 recursive
-
如果非 0, 函数从
src_seq
中利用h_next
和v_next links
连接逼近所有可访问的链。如果为 0, 则仅逼近单链。
这是一个单独的逼近程序。 对同样的逼近标识,函数 cvApproxChains 与 cvFindContours 的工作方式一模一样。它返回发现的第一个轮廓的指针。其它的逼近模块,可以用返回结构中的 v_next
和 v_next
域来访问
StartReadChainPoints
初始化链读取
void cvStartReadChainPoints( CvChain* chain, CvChainPtReader* reader );
-
chain
链的指针
reader
链的读取状态
函数 cvStartReadChainPoints 初始化一个特殊的读取器 (参考 Dynamic Data Structures 以获得关于集合与序列的更多内容).
ReadChainPoint
得到下一个链的点
CvPoint cvReadChainPoint( CvChainPtReader* reader );
-
reader
- 链的读取状态
函数 cvReadChainPoint 返回当前链的点,并且更新读取位置。
ApproxPoly
用指定精度逼近多边形曲线
CvSeq* cvApproxPoly( const void* src_seq, int header_size, CvMemStorage* storage, int method, double parameter, int parameter2=0 );
-
src_seq
- 点集数组序列 header_size
- 逼近曲线的头尺寸 storage
- 逼近轮廓的容器。如果为 NULL, 则使用输入的序列 method
-
逼近方法。目前仅支持
CV_POLY_APPROX_DP
, 对应 Douglas-Peucker 算法. parameter
-
方法相关参数。对
CV_POLY_APPROX_DP
它是指定的逼近精度 parameter2
-
如果
src_seq
是序列,它表示要么逼近单个序列,要么在src_seq
的同一个或低级层次上逼近所有序列 (参考 cvFindContours 中对轮廓继承结构的描述). 如果src_seq
是点集的数组 ( CvMat*) , 参数指定曲线是闭合 (parameter2
!=0) 还是非闭合 (parameter2
=0).
函数 cvApproxPoly 逼近一个或多个曲线,并返回逼近结果。对多个曲线的逼近,生成的树将与输入的具有同样的结构。(1:1 的对应关系).