设为首页 加入收藏

TOP

OpenCV 轮廓检测心得笔记(二)
2015-02-02 14:36:39 来源: 作者: 【 】 浏览:22
Tags:OpenCV 轮廓 检测 心得 笔记
配的内存缓冲区(或显式的通过 cvMemStorageAlloc 函数分配,或隐式的通过 cvSeqPush, cvGraphAddEdge等高级函数分配)


总是起始于当前块(即top块)的剩馀那部分,如果剩馀那部分能满足要求(够分配的大小)。分配后,free_space 就减少了新分配的那部


分内存大小,外加一些用来保存适当列型的附加大小。当top块的剩馀空间无法满足被分配的块(缓冲区)大小时,top块的下一个存储块被


置为当前块(新的top块) -- free_space 被置为先前分配的整个块的大小。


如果已经不存在空的存储块(即:top块已是列尾),则必须再分配一个新的块(或从parent那继承,见 cvCreateChildMemStorage)并


将该块加到列尾上去。于是,存储器(memory storage)就如同栈(Stack)那样, bottom指向栈底,(top, free_space)对指向栈顶。


栈顶可通过 cvSaveMemStoragePos保存,通过 cvRestoreMemStoragePos 恢复指向, 通过 cvClearStorage 重置。


?


?


创建内存块


函数 cvCreateMemStorage 创建一内存块并返回指向块首的指针。起初,存储块是空的。头部(即:header)的所有域值都为 0,除了


block_size 外.


?


cvFindContours


cvFindContours可以得到一个图象所有的轮廓,返回的是轮廓的数量.它可以对cvCanny,cvThreshold(),cvAdaptiveThreshold()函数


处理得到的函数进行轮廓的提取.firstContour参数可以不用创建空间,在函数内部从函数cvFindNextContour返回轮廓的指针.最主要的是


method参数,这个参数涉及轮廓的存储方式,以及什么轮廓能被发现


cvFindContours的第5个参数


CV_RETR_EXTERNAL? ? 查找外边缘,各边缘以指针h_next相连


CV_RETR_LIST? ? ? ? ? ? ? 查找所有边缘(包含内部空洞),各边缘以指针h_next相连


CV_RETR_CCOMP? ? ? ? 查找所有边缘(包含内部空洞),按照如下方式组织


在图像中绘制外部和内部的轮廓。


绘制轮廓的最大等级。如果等级为0,绘制单独的轮廓。如果为1,绘制轮廓及在其后的相同的级别下轮廓。如果值为2,所有的轮廓。


如果等级为2,绘制所有同级轮廓及所有低一级轮廓,诸此种种。如果值为负数,函数不绘制同级轮廓,但会升序绘制直到级别为


abs(max_level)-1的子轮廓。


当thickness>=0,函数cvDrawContours在图像中绘制轮廓,或者当thickness<0时,填充轮廓所限制的区域。


在样本中用1替代 CV_FILLED 以指示的得到外形。


(注意:在cvFindContours中参数为CV_CHAIN_CODE时,cvDrawContours用CV_FILLED时不会画出任何图形)


?其他参数尝试的结果,下面的使用内外都检测 CV_RETR_CCOMP



--------------------------------------分割线 --------------------------------------


--------------------------------------分割线 --------------------------------------


首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇OpenCV 闭合轮廓检测 下一篇将Eclipse中的Java项目转移到Linu..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: