CvMemStorage,CvSeq,CvContour和cvFindContour的分析
来源:互联网 发布:php开发实例大全 pdf 编辑:程序博客网 时间:2024/05/21 20:26
CvSeq源码
#define CV_TREE_NODE_FIELDS(node_type) / int flags; /* micsellaneous flags */ / int header_size; /* size of sequence header */ / struct node_type* h_prev; /* previous sequence */ / struct node_type* h_next; /* next sequence */ / struct node_type* v_prev; /* 2nd previous sequence */ / struct node_type* v_next /* 2nd next sequence *//* Read/Write sequence. Elements can be dynamically inserted to or deleted from the sequence.*/#define CV_SEQUENCE_FIELDS() / CV_TREE_NODE_FIELDS(CvSeq); / int total; /* total number of elements */ / int elem_size; /* size of sequence element in bytes */ / char* block_max; /* maximal bound of the last block */ / char* ptr; /* current write pointer */ / int delta_elems; /* how many elements allocated when the seq grows */ / CvMemStorage* storage; /* where the seq is stored */ / CvSeqBlock* free_blocks; /* free blocks list */ / CvSeqBlock* first; /* pointer to the first sequence block */typedef struct CvSeq{ CV_SEQUENCE_FIELDS()}CvSeq;
CvSeq本身就是可动态增长序列,创建一个CvSeq需要先申请一块儿空间,需要用到CvMemStorage(动态内存存储及操作)
CvMemStorage typedef struct CvMemStorage { struct CvMemBlock* bottom;/* first allocated block */ struct CvMemBlock* top; /* the current memory block - top of the stack */ struct CvMemStorage* parent; /* borrows new blocks from */ int block_size; /* block size */ int free_space; /* free space in the top block (in bytes) */ } CvMemStorage;
关于这个数据结构,有一篇博客讲的非常清楚
http://blog.csdn.net/myeclipseworkspace/article/details/6299281
用完之后要手动释放,否则可能会内存泄露,cvClearMemStorage(storage);
我得理解,cvCreateSeq(int seq_flags,int header_size,int elem_size,CvMemStorage* storage)函数根据参数设定的大小,创建了一个序列,这个序列是树上的一个节点,可动态增加。
CvContour发展自序列
typedef struct CvContour{ CV_CONTOUR_FIELDS()}CvContour;
#define CV_CONTOUR_FIELDS ( ) Value:CV_SEQUENCE_FIELDS() \ CvRect rect; \ int color; \ int reserved[3];
cvFindContours
int iCount=cvFindContours( imgDst, storage, &contour, sizeof(CvContour), CV_RETR_CCOMP, CV_CHAIN_CODE );
只要将查找到的第一个轮廓存入创建的树的结点,便可利用指针找到其他的结点,找到的轮廓是点集,而非封闭的曲线。
0 0
- CvMemStorage,CvSeq,CvContour和cvFindContour的分析
- opencv中的内存存储器CvMemStorage与CvSeq
- OpenCV源码解析之动态内存管理CvMemStorage与CvSeq
- OpenCV源码解析之动态内存管理CvMemStorage与CvSeq
- cvmemstorage
- cvMemStorage
- CvMemStorage
- CvSeq 数据类型分析
- cvseq的用法
- cvSeq的学习
- CvSeq
- cvSeq
- CvSeq
- 使用OpenCV中cvFindContour函数检测轮廓的心得
- CvSeq 的内存释放问题
- CvSeq 的内存释放问题
- CvSeq的理解(转载)
- cvSeq的用法说明
- java如何得到GET和POST请求URL和参数列表
- Java 7 的新特性一览表(转)
- 奖金提成
- 关于#define定义的宏
- 计算机诞生后不久
- CvMemStorage,CvSeq,CvContour和cvFindContour的分析
- WinForm程序用使用List对象绑定DataGridView数据源
- XML解析之初出茅庐
- 安的种子
- 计算机小型化以来简单介绍
- Discuz!DIY完全教程
- 001 - 翻译官方文档之前
- maven环境搭建 .
- 织梦更新后 如何去掉底部的 powered by dedecms