//M*/\r
\r
\r
-#ifndef _CXCORE_H_\r
-#define _CXCORE_H_\r
+#ifndef __OPENCV_CORE_H__\r
+#define __OPENCV_CORE_H__\r
\r
#ifdef __IPL_H__\r
#define HAVE_IPL\r
CVAPI(CvScalar) cvTrace( const CvArr* mat );\r
\r
/* Finds eigen values and vectors of a symmetric matrix */\r
-CVAPI(void) cvEigenVV( CvArr* mat, CvArr* evects,\r
- CvArr* evals, double eps CV_DEFAULT(0));\r
+CVAPI(void) cvEigenVV( CvArr* mat, CvArr* evects, CvArr* evals,\r
+ double eps CV_DEFAULT(0),\r
+ int lowindex CV_DEFAULT(-1),\r
+ int highindex CV_DEFAULT(-1));\r
+\r
+///* Finds selected eigen values and vectors of a symmetric matrix */\r
+//CVAPI(void) cvSelectedEigenVV( CvArr* mat, CvArr* evects, CvArr* evals,\r
+// int lowindex, int highindex );\r
\r
/* Makes an identity matrix (mat_ij = i == j) */\r
CVAPI(void) cvSetIdentity( CvArr* mat, CvScalar value CV_DEFAULT(cvRealScalar(1)) );\r
int count, int in_front CV_DEFAULT(0) );\r
\r
/* Removes several elements from the end of sequence and optionally saves them */\r
-CVAPI(void) cvSeqPopMulti( CvSeq* seq, const void* elements,\r
+CVAPI(void) cvSeqPopMulti( CvSeq* seq, void* elements,\r
int count, int in_front CV_DEFAULT(0) );\r
\r
/* Inserts a new element in the middle of sequence.\r
int line_type CV_DEFAULT(8),\r
int shift CV_DEFAULT(0));\r
\r
+/* Draws a rectangle specified by a CvRect structure */\r
+CVAPI(void) cvRectangleR( CvArr* img, CvRect r,\r
+ CvScalar color, int thickness CV_DEFAULT(1),\r
+ int line_type CV_DEFAULT(8),\r
+ int shift CV_DEFAULT(0));\r
+ \r
+ \r
/* Draws a circle with specified center and radius.\r
Thickness works in the same way as with cvRectangle */\r
CVAPI(void) cvCircle( CvArr* img, CvPoint center, int radius,\r
int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0) )\r
{\r
CvSize axes;\r
- axes.width = cvRound(box.size.height*0.5);\r
- axes.height = cvRound(box.size.width*0.5);\r
+ axes.width = cvRound(box.size.width*0.5);\r
+ axes.height = cvRound(box.size.height*0.5);\r
\r
cvEllipse( img, cvPointFrom32f( box.center ), axes, box.angle,\r
0, 360, color, thickness, line_type, shift );\r
}\r
\r
/* Fills convex or monotonous polygon. */\r
-CVAPI(void) cvFillConvexPoly( CvArr* img, CvPoint* pts, int npts, CvScalar color,\r
+CVAPI(void) cvFillConvexPoly( CvArr* img, const CvPoint* pts, int npts, CvScalar color,\r
int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0));\r
\r
/* Fills an area bounded by one or more arbitrary polygons */\r
-CVAPI(void) cvFillPoly( CvArr* img, CvPoint** pts, int* npts, int contours, CvScalar color,\r
+CVAPI(void) cvFillPoly( CvArr* img, CvPoint** pts, const int* npts,\r
+ int contours, CvScalar color,\r
int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0) );\r
\r
/* Draws one or more polygonal curves */\r
-CVAPI(void) cvPolyLine( CvArr* img, CvPoint** pts, int* npts, int contours,\r
+CVAPI(void) cvPolyLine( CvArr* img, CvPoint** pts, const int* npts, int contours,\r
int is_closed, CvScalar color, int thickness CV_DEFAULT(1),\r
int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0) );\r
\r
CVAPI(int64) cvGetTickCount( void );\r
CVAPI(double) cvGetTickFrequency( void );\r
\r
+/*********************************** CPU capabilities ***********************************/\r
+\r
+#define CV_CPU_NONE 0 \r
+#define CV_CPU_MMX 1\r
+#define CV_CPU_SSE 2\r
+#define CV_CPU_SSE2 3\r
+#define CV_CPU_SSE3 4\r
+#define CV_CPU_SSSE3 5\r
+#define CV_CPU_SSE4_1 6\r
+#define CV_CPU_SSE4_2 7\r
+#define CV_CPU_AVX 10\r
+#define CV_HARDWARE_MAX_FEATURE 255\r
+\r
+CVAPI(int) cvCheckHardwareSupport(int feature);\r
+\r
/*********************************** Multi-Threading ************************************/\r
\r
/* retrieve/set the number of threads used in OpenMP implementations */\r
CVAPI(void) cvSetNumThreads( int threads CV_DEFAULT(0) );\r
/* get index of the thread being executed */\r
CVAPI(int) cvGetThreadNum( void );\r
-\r
-/*************** Convenience functions for better interaction with HighGUI **************/\r
-\r
-typedef IplImage* (CV_CDECL * CvLoadImageFunc)( const char* filename, int colorness );\r
-typedef CvMat* (CV_CDECL * CvLoadImageMFunc)( const char* filename, int colorness );\r
-typedef int (CV_CDECL * CvSaveImageFunc)( const char* filename, const CvArr* image,\r
- const int* params );\r
-typedef void (CV_CDECL * CvShowImageFunc)( const char* windowname, const CvArr* image );\r
-\r
-CVAPI(int) cvSetImageIOFunctions( CvLoadImageFunc _load_image, CvLoadImageMFunc _load_image_m,\r
- CvSaveImageFunc _save_image, CvShowImageFunc _show_image );\r
-\r
-#define CV_SET_IMAGE_IO_FUNCTIONS() \\r
- cvSetImageIOFunctions( cvLoadImage, cvLoadImageM, cvSaveImage, cvShowImage )\r
+ \r
\r
#ifdef __cplusplus\r
}\r
\r
-class CV_EXPORTS CvImage\r
-{\r
-public:\r
- CvImage() : image(0), refcount(0) {}\r
- CvImage( CvSize size, int depth, int channels )\r
- {\r
- image = cvCreateImage( size, depth, channels );\r
- refcount = image ? new int(1) : 0;\r
- }\r
-\r
- CvImage( IplImage* img ) : image(img)\r
- {\r
- refcount = image ? new int(1) : 0;\r
- }\r
-\r
- CvImage( const CvImage& img ) : image(img.image), refcount(img.refcount)\r
- {\r
- if( refcount ) ++(*refcount);\r
- }\r
-\r
- CvImage( const char* filename, const char* imgname=0, int color=-1 ) : image(0), refcount(0)\r
- { load( filename, imgname, color ); }\r
-\r
- CvImage( CvFileStorage* fs, const char* mapname, const char* imgname ) : image(0), refcount(0)\r
- { read( fs, mapname, imgname ); }\r
-\r
- CvImage( CvFileStorage* fs, const char* seqname, int idx ) : image(0), refcount(0)\r
- { read( fs, seqname, idx ); }\r
-\r
- ~CvImage()\r
- {\r
- if( refcount && !(--*refcount) )\r
- {\r
- cvReleaseImage( &image );\r
- delete refcount;\r
- }\r
- }\r
-\r
- CvImage clone() { return CvImage(image ? cvCloneImage(image) : 0); }\r
-\r
- void create( CvSize size, int depth, int channels )\r
- {\r
- if( !image || !refcount ||\r
- image->width != size.width || image->height != size.height ||\r
- image->depth != depth || image->nChannels != channels )\r
- attach( cvCreateImage( size, depth, channels ));\r
- }\r
-\r
- void release() { detach(); }\r
- void clear() { detach(); }\r
-\r
- void attach( IplImage* img, bool use_refcount=true )\r
- {\r
- if( refcount && --*refcount == 0 )\r
- {\r
- cvReleaseImage( &image );\r
- delete refcount;\r
- }\r
- image = img;\r
- refcount = use_refcount && image ? new int(1) : 0;\r
- }\r
-\r
- void detach()\r
- {\r
- if( refcount && --*refcount == 0 )\r
- {\r
- cvReleaseImage( &image );\r
- delete refcount;\r
- }\r
- image = 0;\r
- refcount = 0;\r
- }\r
-\r
- bool load( const char* filename, const char* imgname=0, int color=-1 );\r
- bool read( CvFileStorage* fs, const char* mapname, const char* imgname );\r
- bool read( CvFileStorage* fs, const char* seqname, int idx );\r
- void save( const char* filename, const char* imgname, const int* params=0 );\r
- void write( CvFileStorage* fs, const char* imgname );\r
-\r
- void show( const char* window_name );\r
- bool is_valid() { return image != 0; }\r
-\r
- int width() const { return image ? image->width : 0; }\r
- int height() const { return image ? image->height : 0; }\r
-\r
- CvSize size() const { return image ? cvSize(image->width, image->height) : cvSize(0,0); }\r
-\r
- CvSize roi_size() const\r
- {\r
- return !image ? cvSize(0,0) :\r
- !image->roi ? cvSize(image->width,image->height) :\r
- cvSize(image->roi->width, image->roi->height);\r
- }\r
-\r
- CvRect roi() const\r
- {\r
- return !image ? cvRect(0,0,0,0) :\r
- !image->roi ? cvRect(0,0,image->width,image->height) :\r
- cvRect(image->roi->xOffset,image->roi->yOffset,\r
- image->roi->width,image->roi->height);\r
- }\r
-\r
- int coi() const { return !image || !image->roi ? 0 : image->roi->coi; }\r
-\r
- void set_roi(CvRect roi) { cvSetImageROI(image,roi); }\r
- void reset_roi() { cvResetImageROI(image); }\r
- void set_coi(int coi) { cvSetImageCOI(image,coi); }\r
- int depth() const { return image ? image->depth : 0; }\r
- int channels() const { return image ? image->nChannels : 0; }\r
- int pix_size() const { return image ? ((image->depth & 255)>>3)*image->nChannels : 0; }\r
-\r
- uchar* data() { return image ? (uchar*)image->imageData : 0; }\r
- const uchar* data() const { return image ? (const uchar*)image->imageData : 0; }\r
- int step() const { return image ? image->widthStep : 0; }\r
- int origin() const { return image ? image->origin : 0; }\r
-\r
- uchar* roi_row(int y)\r
- {\r
- assert(0<=y);\r
- assert(!image ?\r
- 1 : image->roi ?\r
- y<image->roi->height : y<image->height);\r
- \r
- return !image ? 0 :\r
- !image->roi ?\r
- (uchar*)(image->imageData + y*image->widthStep) :\r
- (uchar*)(image->imageData + (y+image->roi->yOffset)*image->widthStep +\r
- image->roi->xOffset*((image->depth & 255)>>3)*image->nChannels);\r
- }\r
-\r
- const uchar* roi_row(int y) const\r
- {\r
- assert(0<=y);\r
- assert(!image ?\r
- 1 : image->roi ?\r
- y<image->roi->height : y<image->height); \r
-\r
- return !image ? 0 :\r
- !image->roi ?\r
- (const uchar*)(image->imageData + y*image->widthStep) :\r
- (const uchar*)(image->imageData + (y+image->roi->yOffset)*image->widthStep +\r
- image->roi->xOffset*((image->depth & 255)>>3)*image->nChannels);\r
- }\r
-\r
- operator const IplImage* () const { return image; }\r
- operator IplImage* () { return image; }\r
-\r
- CvImage& operator = (const CvImage& img)\r
- {\r
- if( img.refcount )\r
- ++*img.refcount;\r
- if( refcount && !(--*refcount) )\r
- cvReleaseImage( &image );\r
- image=img.image;\r
- refcount=img.refcount;\r
- return *this;\r
- }\r
-\r
-protected:\r
- IplImage* image;\r
- int* refcount;\r
-};\r
-\r
-\r
-class CV_EXPORTS CvMatrix\r
-{\r
-public:\r
- CvMatrix() : matrix(0) {}\r
- CvMatrix( int rows, int cols, int type )\r
- { matrix = cvCreateMat( rows, cols, type ); }\r
-\r
- CvMatrix( int rows, int cols, int type, CvMat* hdr,\r
- void* data=0, int step=CV_AUTOSTEP )\r
- { matrix = cvInitMatHeader( hdr, rows, cols, type, data, step ); }\r
-\r
- CvMatrix( int rows, int cols, int type, CvMemStorage* storage, bool alloc_data=true );\r
-\r
- CvMatrix( int rows, int cols, int type, void* data, int step=CV_AUTOSTEP )\r
- { matrix = cvCreateMatHeader( rows, cols, type );\r
- cvSetData( matrix, data, step ); }\r
-\r
- CvMatrix( CvMat* m )\r
- { matrix = m; }\r
-\r
- CvMatrix( const CvMatrix& m )\r
- {\r
- matrix = m.matrix;\r
- addref();\r
- }\r
-\r
- CvMatrix( const char* filename, const char* matname=0, int color=-1 ) : matrix(0)\r
- { load( filename, matname, color ); }\r
-\r
- CvMatrix( CvFileStorage* fs, const char* mapname, const char* matname ) : matrix(0)\r
- { read( fs, mapname, matname ); }\r
-\r
- CvMatrix( CvFileStorage* fs, const char* seqname, int idx ) : matrix(0)\r
- { read( fs, seqname, idx ); }\r
-\r
- ~CvMatrix()\r
- {\r
- release();\r
- }\r
-\r
- CvMatrix clone() { return CvMatrix(matrix ? cvCloneMat(matrix) : 0); }\r
-\r
- void set( CvMat* m, bool add_ref )\r
- {\r
- release();\r
- matrix = m;\r
- if( add_ref )\r
- addref();\r
- }\r
-\r
- void create( int rows, int cols, int type )\r
- {\r
- if( !matrix || !matrix->refcount ||\r
- matrix->rows != rows || matrix->cols != cols ||\r
- CV_MAT_TYPE(matrix->type) != type )\r
- set( cvCreateMat( rows, cols, type ), false );\r
- }\r
-\r
- void addref() const\r
- {\r
- if( matrix )\r
- {\r
- if( matrix->hdr_refcount )\r
- ++matrix->hdr_refcount;\r
- else if( matrix->refcount )\r
- ++*matrix->refcount;\r
- }\r
- }\r
-\r
- void release()\r
- {\r
- if( matrix )\r
- {\r
- if( matrix->hdr_refcount )\r
- {\r
- if( --matrix->hdr_refcount == 0 )\r
- cvReleaseMat( &matrix );\r
- }\r
- else if( matrix->refcount )\r
- {\r
- if( --*matrix->refcount == 0 )\r
- cvFree( &matrix->refcount );\r
- }\r
- matrix = 0;\r
- }\r
- }\r
-\r
- void clear()\r
- {\r
- release();\r
- }\r
-\r
- bool load( const char* filename, const char* matname=0, int color=-1 );\r
- bool read( CvFileStorage* fs, const char* mapname, const char* matname );\r
- bool read( CvFileStorage* fs, const char* seqname, int idx );\r
- void save( const char* filename, const char* matname, const int* params=0 );\r
- void write( CvFileStorage* fs, const char* matname );\r
-\r
- void show( const char* window_name );\r
-\r
- bool is_valid() { return matrix != 0; }\r
-\r
- int rows() const { return matrix ? matrix->rows : 0; }\r
- int cols() const { return matrix ? matrix->cols : 0; }\r
-\r
- CvSize size() const\r
- {\r
- return !matrix ? cvSize(0,0) : cvSize(matrix->rows,matrix->cols);\r
- }\r
-\r
- int type() const { return matrix ? CV_MAT_TYPE(matrix->type) : 0; }\r
- int depth() const { return matrix ? CV_MAT_DEPTH(matrix->type) : 0; }\r
- int channels() const { return matrix ? CV_MAT_CN(matrix->type) : 0; }\r
- int pix_size() const { return matrix ? CV_ELEM_SIZE(matrix->type) : 0; }\r
-\r
- uchar* data() { return matrix ? matrix->data.ptr : 0; }\r
- const uchar* data() const { return matrix ? matrix->data.ptr : 0; }\r
- int step() const { return matrix ? matrix->step : 0; }\r
-\r
- void set_data( void* data, int step=CV_AUTOSTEP )\r
- { cvSetData( matrix, data, step ); }\r
-\r
- uchar* row(int i) { return !matrix ? 0 : matrix->data.ptr + i*matrix->step; }\r
- const uchar* row(int i) const\r
- { return !matrix ? 0 : matrix->data.ptr + i*matrix->step; }\r
-\r
- operator const CvMat* () const { return matrix; }\r
- operator CvMat* () { return matrix; }\r
-\r
- CvMatrix& operator = (const CvMatrix& _m)\r
- {\r
- _m.addref();\r
- release();\r
- matrix = _m.matrix;\r
- return *this;\r
- }\r
-\r
-protected:\r
- CvMat* matrix;\r
-};\r
-\r
-\r
// classes for automatic module/RTTI data registration/unregistration\r
struct CV_EXPORTS CvModule\r
{\r
#include "cxcore.hpp"\r
#endif // SKIP_INCLUDES\r
\r
-#endif /*_CXCORE_H_*/\r
+#endif\r