博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OpenCV——CvSeq动态结构序列
阅读量:6001 次
发布时间:2019-06-20

本文共 2805 字,大约阅读时间需要 9 分钟。

动态结构序列CvSeq是所有OpenCV动态数据结构的基础。

分为两类:

  •  稠密序列
  •  稀疏序列

(1) 稠密序列都派生自CvSeq,他们用来代表可扩展的一维数组 — 向量、栈、队列和双端队列。数据间不存在空隙(连续存储)。如果元素元素从序列中间被删除或插入新的元素到序列,那么此元素后边的相关元素全部被移动。

(2)稀疏序列派生自CvSet,CvSet也是基于CvSeq的,他们都是由节点所组成,每一个节点要么被占用,那么为空,由标志位flag决定。这些序列作为无序数据结构被使用,如点集合、图、Hash表等。

CvSeq的定义如下:

/*    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.   */  \      schar*    block_max;      /* Maximal bound of the last block.     */  \      schar*    ptr;            /* Current write pointer.               */  \      int       delta_elems;    /* Grow seq this many at a time.        */  \      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;
/*total表示稠密序列的元素个数,或者稀疏序列被分配的节点数。elem_size表示序列中每个元素占用的字节数。block_max是最近一个内存的最大边界指针。ptr表示当写指针。delta_elems表示序列间隔尺寸。storage指向序列存储的内存块的指针。free_blocks表示空的块列表。first指向第一个序列块。h_next和h_prev并不是指向CvSeq内部元素的指针,它们是指向其它CvSeq的。*/

 

有关CvSeq的函数

//创建序列CvSeq* cvCreateSeq(int seq_flags,int header_size,int elem_size,CvMemStorage* storage)//复制序列CvSeq* cvCloneSeq(const CvSeq* seq,CvMemStorage* storage=NULL)//逆序序列Void cvSeqInvert(CvSeq* seq)//序列排序Void cvSeqSort(CvSeq* seq,CvCmpFunc func,void *userdata=NULL)//查询元素Char* cvSeqSearch(CvSeq* seq,const void* elem,CvCmpFunc func,int is_sorted,int *elem_idx,void *userdata=NULL)//清空序列Void cvClearSeq(CvSeq* seq);
//添加删除元素//尾部添加Char* cvSeqPush(CvSeq* seq,void* element=NULL);//尾部删除void cvSeqPop(CvSeq* seq,void* element=NULL);//头部添加Char* cvSeqPushFront(CvSeq* seq,void* element=NULL);//头部删除Void cvSeqPopFront(CvSeq* seq,void* element=NULL);//添加多个元素Void cvSeqPushMulti(CvSeq* seq,void* elements,int count,int in_front=0);//删除多个元素Void cvSeqPopMulti(CvSeq* seq,void* elements,int count,int in_front=0);//指定位置添加元素Char* cvSeqInsert(CvSeq* seq,int before_index,void* element=NULL);//指定位置删除元素Void cvSeqRemove(CvSeq* seq,int index);
//返回指定元素的指针Char* cvGetSeqElem(const CvSeq* seq,int index);//返回元素索引Int cvSeqElemIdx(const CvSeq* seq,const void* element,CvSeqBlock** block=NULL);//写入序列Void cvStartAppendToSeq(CvSeq* seq,CvSeqWriter* writer);//创建并初始化Void cvStartWriteSeq(int seq_flags,int header_size,int elem_size,CvMemStorage* storage,CvSeqWriter* writer);//完成写入操作CvSeq* cvEndWriteSeq(CvSeqWriter* writer);//初始化序列中读取过程Void cvStartReadSeq(const CvSeq* seq,CvSeqReader* reader,int reverse=0);

 

转载地址:http://xgwmx.baihongyu.com/

你可能感兴趣的文章
Face Aging with Conditional Generative Adversarial Network 论文笔记
查看>>
Java虚拟机学习 - 对象访问 (2)
查看>>
Atitit 通用接口的设计与实现attilax 总结
查看>>
高通Android camera运行流程【转】
查看>>
thinkPHP 上传文件的中文乱码
查看>>
C#编程(六十六)----------表达式树总结
查看>>
MySQL InnoDB的存储结构总结
查看>>
Android解析ActivityManagerService(一)AMS启动流程和AMS家族
查看>>
Linux上磁盘挂载
查看>>
easyui 只刷新当前页面的数据 datagrid reload 方法
查看>>
PLSA-概率潜语义分析(二)
查看>>
Java反射机制在Spring IOC中的应用
查看>>
使用POI 读取 Excel 文件,读取手机号码 变成 1.3471022771E10
查看>>
IOS-UITableView入门(3)
查看>>
JavaScript -- 标签 , Break 和 Continue 语句
查看>>
jquery面向对象写法
查看>>
YTUOJ-推断字符串是否为回文
查看>>
在Mac OS X中部署Tomcat的经验
查看>>
[ExtJS5学习笔记]第八节 Extjs5的Ext.toolbar.Toolbar工具条组件及其应用
查看>>
超时设置或默认参数 专题
查看>>