CVseq 동적 구조 시퀀스

동적 구조 시퀀스 CVseq 는 모든 OpenCv 동적 데이터 구조의 기초 입 니 다.두 가지 유형의 서열 이 있 습 니 다. 조밀 한 서열, 희소 한 서열:
(1) 조밀 한 서열 은 모두 CVseq 에서 파생 되 는데 그들 은 확장 가능 한 1 차원 배열 인 벡터, 스 택, 대기 열 과 2 단 대기 열 을 대표 합 니 다.데이터 사이 에 공간 이 존재 하지 않 습 니 다 (연속 저장).만약 요소 요소 가 시퀀스 중간 에서 삭제 되 거나 새로운 요소 에서 시퀀스 로 삽입 된다 면 이 요소 뒤의 관련 요 소 는 모두 이동 합 니 다.
(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;

 
totalk 은 조밀 한 서열 의 요소 개 수 를 나타 내 거나 희소 한 서열 이 분 배 된 노드 수 를 나타 낸다.elem_size 는 시퀀스 의 모든 요소 가 차지 하 는 바이트 수 를 표시 합 니 다.block_max 는 최근 메모리 의 최대 경계 지침 입 니 다.ptr 는 포인터 로 표시 합 니 다.delta_elems 는 시퀀스 간격 사 이 즈 를 표시 합 니 다.storage 는 시퀀스 에 저 장 된 메모리 블록 을 가리 키 는 지침 입 니 다.free_Blocks 는 빈 블록 목록 을 표시 합 니 다.first 는 첫 번 째 시퀀스 블록 을 가리킨다.
        CVseq 자체 가 성장 가능 한 시퀀스 입 니 다. CVseq: totalk 은 시퀀스 내부 의 유효 요소 의 개 수 를 말 합 니 다.그리고 hnext 와 hprev 는 CVseq 내부 요 소 를 가리 키 는 지침 이 아니 라 다른 CVseq 를 가리 키 는 지침 입 니 다.글 의 초기 코드 로 돌아 가면 이 코드 는 논리 적 인 오 류 를 가지 고 있 습 니 다. 먼저 while 문 구 는 모든 CVseq 를 옮 겨 다 니 며 process 로 모든 CVseq 를 처리 하고 삭제 해 야 할 CVseq 를 만 났 을 때 만 cvseqRemove 를 사용 하여 현재 CVseq 의 두 번 째 index 요 소 를 삭제 합 니 다.실제로 이 때 index 는 현재 CVseq 의 총 요소 의 개 수 를 초과 할 수 있 기 때문에 경 계 를 초과 하 는 오류 가 발생 했 습 니 다.올 바른 방법 은 이 CVseq 를 직접 삭제 하 는 것 입 니 다.
CvSeq* cvCreateSeq(int seq_flags,int header_size,int elem_size,CvMemStorage* storage)
기능: 시퀀스 만 들 기
파라미터: seqflags 를 시퀀스 로 하 는 기호 표지 입 니 다.만약 시퀀스 가 특정한 시퀀스 를 사용 하 는 함수 에 전달 되 지 않 는 다 면 0 으로 설정 합 니 다. 그렇지 않 으 면 미리 정 의 된 시퀀스 형식 에서 적당 한 종 류 를 선택 하 십시오.Header_size 는 시퀀스 된 머리 크기 입 니 다.크기 of (CVseq) 보다 크 거나 같 아야 합 니 다.형식 이나 확장 자 를 만 들 었 다 면 이 유형 은 기본 클래스 의 머리 크기 에 맞 아야 합 니 다.Elem_size 는 요소 의 크기 로 바이트 로 계산 합 니 다.이 크기 는 시퀀스 형식 (seq flags 에서 지정) 과 일치 해 야 합 니 다.예 를 들 어 한 점 의 서열 에 대해 요소 유형 CVSEQ_ELTYPE_POINT 는 지정 되 어야 합 니 다. 매개 변수 elemsize 는 sizeof (CvPoint) 와 같 아야 합 니 다.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)
기능: 시퀀스 의 읽 기 과정 초기 화
 

좋은 웹페이지 즐겨찾기