OpenCV——CvSeq動態結構序列

來源:互聯網
上載者:User

標籤:ems   one   free   lag   讀取   type   first   row   cve   

動態結構序列CvSeq是所有OpenCV動態資料結構的基礎。

分為兩類:

  •  稠密序列
  •  稀疏序列

(1) 稠密序列都派生自CvSeq,他們用來代表可擴充的一維數組 — 向量、棧、隊列和雙端隊列。資料間不存在空隙(連續儲存)。如果元素元素從序列中間被刪除或插入新的元素到序列,那麼此元素後邊的相關元素全部被移動。

(2)稀疏序列派生自CvSet,CvSet也是基於CvSeq的,他們都是由節點所組成,每一個節點要麼被佔用,那麼為空白,由標誌位flag決定。這些序列作為無序資料結構被使用,如點集合、圖、Hash表等。

CvSeq的定義如下:

<span style="color:#ff0000; font-style:italic">/*    Read/Write sequence.    Elements can be dynamically inserted to or deleted from the sequence. */</span>  <span style="color:#339900">#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. */</span>     <span style="color:#00ff00">typedef</span> <span style="color:#00ff00">struct</span> CvSeq  <span style="color:#080000">{</span>      CV_SEQUENCE_FIELDS<span style="color:#080000">(</span><span style="color:#080000">)</span>  <span style="color:#080000">}</span>  CvSeq<span style="color:#080800">;</span>  
/*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);

 

OpenCV——CvSeq動態結構序列

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.