📄 cxtypes.h
字号:
CV_INLINE CvPoint2D32f cvPoint2D32f( double x, double y ){ CvPoint2D32f p; p.x = (float)x; p.y = (float)y; return p;}CV_INLINE CvPoint2D32f cvPointTo32f( CvPoint point ){ return cvPoint2D32f( (float)point.x, (float)point.y );}typedef struct CvPoint3D32f{ float x; float y; float z;}CvPoint3D32f;CV_INLINE CvPoint3D32f cvPoint3D32f( double x, double y, double z ){ CvPoint3D32f p; p.x = (float)x; p.y = (float)y; p.z = (float)z; return p;}typedef struct CvPoint2D64f{ double x; double y;}CvPoint2D64f;CV_INLINE CvPoint2D64f cvPoint2D64f( double x, double y ){ CvPoint2D64f p; p.x = x; p.y = y; return p;}typedef struct CvPoint3D64f{ double x; double y; double z;}CvPoint3D64f;CV_INLINE CvPoint3D64f cvPoint3D64f( double x, double y, double z ){ CvPoint3D64f p; p.x = x; p.y = y; p.z = z; return p;}/******************************** CvSize's & CvBox **************************************/typedef struct{ int width; int height;}CvSize;CV_INLINE CvSize cvSize( int width, int height ){ CvSize s; s.width = width; s.height = height; return s;}typedef struct CvSize2D32f{ float width; float height;}CvSize2D32f;CV_INLINE CvSize2D32f cvSize2D32f( double width, double height ){ CvSize2D32f s; s.width = (float)width; s.height = (float)height; return s;}typedef struct CvBox2D{ CvPoint2D32f center; /* center of the box */ CvSize2D32f size; /* box width and length */ float angle; /* angle between the horizontal axis and the first side (i.e. length) in degrees */}CvBox2D;/* Line iterator state */typedef struct CvLineIterator{ /* pointer to the current point */ uchar* ptr; /* Bresenham algorithm state */ int err; int plus_delta; int minus_delta; int plus_step; int minus_step;}CvLineIterator;/************************************* CvSlice ******************************************/typedef struct CvSlice{ int start_index, end_index;}CvSlice;CV_INLINE CvSlice cvSlice( int start, int end ){ CvSlice slice; slice.start_index = start; slice.end_index = end; return slice;}#define CV_WHOLE_SEQ_END_INDEX 0x3fffffff#define CV_WHOLE_SEQ cvSlice(0, CV_WHOLE_SEQ_END_INDEX)/************************************* CvScalar *****************************************/typedef struct CvScalar{ double val[4];}CvScalar;CV_INLINE CvScalar cvScalar( double val0, double val1 CV_DEFAULT(0), double val2 CV_DEFAULT(0), double val3 CV_DEFAULT(0)){ CvScalar scalar; scalar.val[0] = val0; scalar.val[1] = val1; scalar.val[2] = val2; scalar.val[3] = val3; return scalar;}CV_INLINE CvScalar cvRealScalar( double val0 ){ CvScalar scalar; scalar.val[0] = val0; scalar.val[1] = scalar.val[2] = scalar.val[3] = 0; return scalar;}CV_INLINE CvScalar cvScalarAll( double val0123 ){ CvScalar scalar; scalar.val[0] = val0123; scalar.val[1] = val0123; scalar.val[2] = val0123; scalar.val[3] = val0123; return scalar;}/****************************************************************************************\* Dynamic Data structures *\****************************************************************************************//******************************** Memory storage ****************************************/typedef struct CvMemBlock{ struct CvMemBlock* prev; struct CvMemBlock* next;}CvMemBlock;#define CV_STORAGE_MAGIC_VAL 0x42890000typedef struct CvMemStorage{ int signature; CvMemBlock* bottom;/* first allocated block */ CvMemBlock* top; /* 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 current block */}CvMemStorage;#define CV_IS_STORAGE(storage) \ ((storage) != NULL && \ (((CvMemStorage*)(storage))->signature & CV_MAGIC_MASK) == CV_STORAGE_MAGIC_VAL)typedef struct CvMemStoragePos{ CvMemBlock* top; int free_space;}CvMemStoragePos;/*********************************** Sequence *******************************************/typedef struct CvSeqBlock{ struct CvSeqBlock* prev; /* previous sequence block */ struct CvSeqBlock* next; /* next sequence block */ int start_index; /* index of the first element in the block + sequence->first->start_index */ int count; /* number of elements in the block */ char* data; /* pointer to the first element of the block */}CvSeqBlock;#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;#define CV_TYPE_NAME_SEQ "opencv-sequence"#define CV_TYPE_NAME_SEQ_TREE "opencv-sequence-tree"/*************************************** Set ********************************************//* Set. Order is not preserved. There can be gaps between sequence elements. After the element has been inserted it stays in the same place all the time. The MSB(most-significant or sign bit) of the first field (flags) is 0 iff the element exists.*/#define CV_SET_ELEM_FIELDS(elem_type) \ int flags; \ struct elem_type* next_free;typedef struct CvSetElem{ CV_SET_ELEM_FIELDS(CvSetElem)}CvSetElem;#define CV_SET_FIELDS() \ CV_SEQUENCE_FIELDS() \ CvSetElem* free_elems; \ int active_count;typedef struct CvSet{ CV_SET_FIELDS()}CvSet;#define CV_SET_ELEM_IDX_MASK ((1 << 26) - 1)#define CV_SET_ELEM_FREE_FLAG (1 << (sizeof(int)*8-1))/* Checks whether the element pointed by ptr belongs to a set or not */#define CV_IS_SET_ELEM( ptr ) (((CvSetElem*)(ptr))->flags >= 0)/************************************* Graph ********************************************//* Graph is represented as a set of vertices. Vertices contain their adjacency lists (more exactly, pointers to first incoming or outcoming edge (or 0 if isolated vertex)). Edges are stored in another set. There is a single-linked list of incoming/outcoming edges for each vertex. Each edge consists of: two pointers to the starting and the ending vertices (vtx[0] and vtx[1], respectively). Graph may be oriented or not. In the second case, edges between vertex i to vertex j are not distingueshed (during the search operations). two pointers to next edges for the starting and the ending vertices. next[0] points to the next edge in the vtx[0] adjacency list and next[1] points to the next edge in the vtx[1] adjacency list.*/#define CV_GRAPH_EDGE_FIELDS() \ int flags; \ float weight; \ struct CvGraphEdge* next[2]; \ struct CvGraphVtx* vtx[2];#define CV_GRAPH_VERTEX_FIELDS() \ int flags; \ struct CvGraphEdge* first;typedef struct CvGraphEdge{ CV_GRAPH_EDGE_FIELDS()}CvGraphEdge;typedef struct CvGraphVtx{ CV_GRAPH_VERTEX_FIELDS()}CvGraphVtx;typedef struct CvGraphVtx2D{ CV_GRAPH_VERTEX_FIELDS() CvPoint2D32f* ptr;}CvGraphVtx2D;/* Graph is "derived" from the set (this is set a of vertices) and includes another set (edges)*/#define CV_GRAPH_FIELDS() \ CV_SET_FIELDS() \ CvSet* edges;typedef struct CvGraph{ CV_GRAPH_FIELDS()}CvGraph;#define CV_TYPE_NAME_GRAPH "opencv-graph"/*********************************** Chain/Countour *************************************/typedef struct CvChain{ CV_SEQUENCE_FIELDS() CvPoint origin;}CvChain;#define CV_CONTOUR_FIELDS() \ CV_SEQUENCE_FIELDS() \ CvRect rect; \ int color; \ int reserved[3];typedef struct CvContour{ CV_CONTOUR_FIELDS()}CvContour;typedef CvContour CvPoint2DSeq;/****************************************************************************************\* Sequence types *\****************************************************************************************/#define CV_SEQ_MAGIC_VAL 0x42990000#define CV_IS_SEQ(seq) \ ((seq) != NULL && (((CvSeq*)(seq))->flags & CV_MAGIC_MASK) == CV_SEQ_MAGIC_VAL)#define CV_SET_MAGIC_VAL 0x42980000
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -