OpenCV中常用到的轮廓处理函数汇总
2011-02-23 11:17
344 查看
转自:http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm
src_seq 涉及其它链的链指针 storage 存储多边形线段位置的缓存 method 逼近方法 (见函数 cvFindContours 的描述). parameter 方法参数(现在不用). minimal_perimeter仅逼近周长大于
这是一个单独的逼近程序。 对同样的逼近标识,函数 cvApproxChains 与 cvFindContours 的工作方式一模一样。它返回发现的第一个轮廓的指针。其它的逼近模块,可以用返回结构中的
chain
链的指针
reader
链的读取状态
函数 cvStartReadChainPoints初始化一个特殊的读取器 (参考 Dynamic Data Structures 以获得关于集合与序列的更多内容).
reader 链的读取状态
函数 cvReadChainPoint 返回当前链的点,并且更新读取位置。
src_seq 点集数组序列 header_size 逼近曲线的头尺寸 storage 逼近轮廓的容器。如果为 NULL, 则使用输入的序列 method 逼近方法。目前仅支持
函数 cvApproxPoly 逼近一个或多个曲线,并返回逼近结果。对多个曲线的逼近,生成的树将与输入的具有同样的结构。(1:1 的对应关系).
points 二维点集,点的序列或向量 (
update=0, contour ~ CvContour*: 不计算矩形边界,但直接由轮廓头的
update=1, contour ~ CvContour*: 计算矩形边界,而且将结果写入到轮廓头的
update=0, contour ~ CvSeq* or CvMat*: 计算并返回边界矩形
update=1, contour ~ CvSeq* or CvMat*: 产生运行错误 (runtime error is raised)
函数 cvBoundingRect 返回二维点集的最外面 (up-right)矩形边界。
contour 轮廓 (定点的序列或数组). slice 感兴趣轮廓部分的起始点,缺省是计算整个轮廓的面积。
函数 cvContourArea 计算整个轮廓或部分轮廓的面积。 对后面的情况,面积表示轮廓部分和起始点连线构成的封闭部分的面积。如下图所示:
NOTE: 轮廓的方向影响面积的符号。因此函数也许会返回负的结果。应用函数
curve 曲线点集序列或数组 slice 曲线的起始点,缺省是计算整个曲线的长度 is_closed 表示曲线是否闭合,有三种情况:
is_closed=0 - 假设曲线不闭合
is_closed>0 - 假设曲线闭合
is_closed<0 - 若曲线是序列,检查 ((CvSeq*)curve)->flags 中的标识 CV_SEQ_FLAG_CLOSED 来确定曲线是否闭合。否则 (曲线由点集的数组 (CvMat*) 表示) 假设曲线不闭合。
函数 cvArcLength 通过依次计算序列点之间的线段长度,并求和来得到曲线的长度。
contour 输入的轮廓 storage 输出树的容器 threshold 逼近精度
函数 cvCreateContourTree 为输入轮廓
tree 轮廓树 storage 重构的轮廓容器 criteria 停止重构的准则
函数 cvContourFromContourTree 从二叉树恢复轮廓。参数
tree1 第一个轮廓树 tree2 第二个轮廓树 method 相似度。仅支持
函数 cvMatchContourTrees 计算两个轮廓树的匹配值。从树根开始通过逐层比较来计算相似度。如果某层的相似度小于
ApproxChains
用多边形曲线逼近 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_nextlinks连接逼近所有可访问的链。如果为 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 的对应关系).
BoundingRect
计算点集的最外面(up-right)矩形边界CvRect cvBoundingRect( CvArr* points, int update=0 );
points 二维点集,点的序列或向量 (
CvMat) update 更新标识。下面是轮廓类型和标识的一些可能组合:
update=0, contour ~ CvContour*: 不计算矩形边界,但直接由轮廓头的
rect域得到。
update=1, contour ~ CvContour*: 计算矩形边界,而且将结果写入到轮廓头的
rect域中 header.
update=0, contour ~ CvSeq* or CvMat*: 计算并返回边界矩形
update=1, contour ~ CvSeq* or CvMat*: 产生运行错误 (runtime error is raised)
函数 cvBoundingRect 返回二维点集的最外面 (up-right)矩形边界。
ContourArea
计算整个轮廓或部分轮廓的面积double cvContourArea( const CvArr* contour, CvSlice slice=CV_WHOLE_SEQ );
contour 轮廓 (定点的序列或数组). slice 感兴趣轮廓部分的起始点,缺省是计算整个轮廓的面积。
函数 cvContourArea 计算整个轮廓或部分轮廓的面积。 对后面的情况,面积表示轮廓部分和起始点连线构成的封闭部分的面积。如下图所示:
NOTE: 轮廓的方向影响面积的符号。因此函数也许会返回负的结果。应用函数
fabs()得到面积的绝对值。
ArcLength
计算轮廓周长或曲线长度double cvArcLength( const void* curve, CvSlice slice=CV_WHOLE_SEQ, int is_closed=-1 );
curve 曲线点集序列或数组 slice 曲线的起始点,缺省是计算整个曲线的长度 is_closed 表示曲线是否闭合,有三种情况:
is_closed=0 - 假设曲线不闭合
is_closed>0 - 假设曲线闭合
is_closed<0 - 若曲线是序列,检查 ((CvSeq*)curve)->flags 中的标识 CV_SEQ_FLAG_CLOSED 来确定曲线是否闭合。否则 (曲线由点集的数组 (CvMat*) 表示) 假设曲线不闭合。
函数 cvArcLength 通过依次计算序列点之间的线段长度,并求和来得到曲线的长度。
CreateContourTree
创建轮廓的继承表示形式CvContourTree* cvCreateContourTree( const CvSeq* contour, CvMemStorage* storage, double threshold );
contour 输入的轮廓 storage 输出树的容器 threshold 逼近精度
函数 cvCreateContourTree 为输入轮廓
contour创建一个二叉树,并返回树根的指针。如果参数
threshold小于或等于 0 ,则函数创建一个完整的二叉树。如果
threshold大于 0 , 函数用
threshold指定的精度创建二叉树:如果基线的截断区域顶点小于threshold,该数就停止生长并作为函数的最终结果返回。
ContourFromContourTree
由树恢复轮廓CvSeq* cvContourFromContourTree( const CvContourTree* tree, CvMemStorage* storage, CvTermCriteria criteria );
tree 轮廓树 storage 重构的轮廓容器 criteria 停止重构的准则
函数 cvContourFromContourTree 从二叉树恢复轮廓。参数
criteria决定了重构的精度和使用树的数目及层次。所以它可建立逼近的轮廓。 函数返回重构的轮廓。
MatchContourTrees
用树的形式比较两个轮廓double cvMatchContourTrees( const CvContourTree* tree1, const CvContourTree* tree2, int method, double threshold );
tree1 第一个轮廓树 tree2 第二个轮廓树 method 相似度。仅支持
CV_CONTOUR_TREES_MATCH_I1。 threshold 相似度阈值
函数 cvMatchContourTrees 计算两个轮廓树的匹配值。从树根开始通过逐层比较来计算相似度。如果某层的相似度小于
threshold, 则中断比较过程,且返回当前的差值。
相关文章推荐
- OpenCV中常用到的轮廓处理函数汇总
- OpenCV中常用到的轮廓处理函数汇总
- OpenCV图像处理中常用函数汇总(1)
- OpenCV图像处理中常用函数汇总(2)
- OpenCV图像处理中常用函数汇总
- 【OpenCV】图像处理和图像识别中常用的OpenCV函数汇总
- 图像处理之opencv---常用函数
- opencv图像处理的一些常用函数简单使用
- OpenCV 图像处理常用函数
- 图像处理_常用函数_OpenCV
- OpenCV处理视频的常用函数
- opencv 图像简单逻辑操作汇总与一些常用的函数
- opencv中常用的图像处理函数
- OpenCV_图像元素处理常用函数
- 常用字符串处理函数汇总
- opencv常用图像处理函数(C版本)
- 图像识别与处理之Opencv——常用的OpenCV2函数速查
- opencv轮廓处理函数详细
- C\C++常用字符串\字符数组处理函数汇总
- matlab处理double jpeg问题常用函数不定期汇总