術語簡介,套用舉例,
術語簡介
CvSeq* cvCreateSeq(int seq_flags,int header_size,int elem_size,CvMemStorage* storage)
功能:創建一序列
說明:CvSeq本身就是一個可增長的序列,不是固定的序列
參數:seq_flags為序列的符號標誌。如果序列不會被傳遞給任何使用特定序列的函式,那么將它設為0,否則從預定義的序列類型中選擇一合適的類型。 Header_size為序列頭部的大小;必須大於或等於sizeof(CvSeq)。如果制定了類型或它的擴展名,則此類型必須適合基類的頭部大小。 Elem_size為元素的大小,以位元組計。這個大小必須與序列類型(由seq_flags指定)相一致。例如,對於一個點的序列,元素類型 CV_SEQ_ELTYPE_POINT應當被指定,參數elem_size必須等同於sizeof(CvPoint)。Storage為指向前面定義的記憶體存儲器.
套用舉例
對於CvSeq這一結構體,又稱為可動態增長元素序列(OpenCV_1.0已發生改變,詳見cxtypes.h) Growable sequence of elements。
CvSeq定義複雜,首先,定義CV_SEQUENCE_FIELDS()。
#define CV_SEQUENCE_FIELDS() \
int flags; /* micsellaneous flags */ \
int header_size; /* size of sequence header */ \
struct CvSeq* h_prev; /* previous sequence */ \
struct CvSeq* h_next; /* next sequence */ \
struct CvSeq* v_prev; /* 2nd previous sequence */ \
struct CvSeq* v_next; /* 2nd next sequence */ \
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 sequence grows (sequence
granularity) */ \
CvMemStorage* storage; /* where the seq is stored */ \
CvSeqBlock* free_blocks; /* free blocks list */ \
CvSeqBlock* first; /* pointer to the first sequence block */
而CvSeq可以表達成:
typedef struct CvSeq
{
CV_SEQUENCE_FIELDS()
} CvSeq;