16acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*M/////////////////////////////////////////////////////////////////////////////////////// 26acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 36acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. 46acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 56acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// By downloading, copying, installing or using the software you agree to this license. 66acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// If you do not agree to this license, do not download, install, 76acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// copy or use the software. 86acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 96acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// Intel License Agreement 116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// For Open Source Computer Vision Library 126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// Copyright (C) 2000, Intel Corporation, all rights reserved. 146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// Third party copyrights are property of their respective owners. 156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// Redistribution and use in source and binary forms, with or without modification, 176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// are permitted provided that the following conditions are met: 186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// * Redistribution's of source code must retain the above copyright notice, 206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// this list of conditions and the following disclaimer. 216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// * Redistribution's in binary form must reproduce the above copyright notice, 236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// this list of conditions and the following disclaimer in the documentation 246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// and/or other materials provided with the distribution. 256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// * The name of Intel Corporation may not be used to endorse or promote products 276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// derived from this software without specific prior written permission. 286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// This software is provided by the copyright holders and contributors "as is" and 306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// any express or implied warranties, including, but not limited to, the implied 316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// warranties of merchantability and fitness for a particular purpose are disclaimed. 326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// In no event shall the Intel Corporation or contributors be liable for any direct, 336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// indirect, incidental, special, exemplary, or consequential damages 346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// (including, but not limited to, procurement of substitute goods or services; 356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// loss of use, data, or profits; or business interruption) however caused 366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// and on any theory of liability, whether in contract, strict liability, 376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// or tort (including negligence or otherwise) arising in any way out of 386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// the use of this software, even if advised of the possibility of such damage. 396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//M*/ 416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#ifndef _CXCORE_H_ 446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define _CXCORE_H_ 456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#ifdef __IPL_H__ 476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define HAVE_IPL 486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#ifndef SKIP_INCLUDES 516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #if defined HAVE_IPL && !defined __IPL_H__ 526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #ifndef _INC_WINDOWS 536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #define CV_PRETEND_WINDOWS 546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #define _INC_WINDOWS 556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn typedef struct tagBITMAPINFOHEADER BITMAPINFOHEADER; 566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn typedef int BOOL; 576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #endif 586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #if defined WIN32 || defined WIN64 596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #include "ipl.h" 606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #else 616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #include "ipl/ipl.h" 626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #endif 636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #ifdef CV_PRETEND_WINDOWS 646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #undef _INC_WINDOWS 656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #endif 666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #endif 676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif // SKIP_INCLUDES 686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#include "cxtypes.h" 706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#include "cxerror.h" 716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#include "cvver.h" 726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#ifdef __cplusplus 746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennextern "C" { 756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/****************************************************************************************\ 786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn* Array allocation, deallocation, initialization and access to elements * 796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn\****************************************************************************************/ 806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* <malloc> wrapper. 826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn If there is no enough memory, the function 836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (as well as other OpenCV functions that call cvAlloc) 846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn raises an error. */ 856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void*) cvAlloc( size_t size ); 866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* <free> wrapper. 886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn Here and further all the memory releasing functions 896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (that all call cvFree) take double pointer in order to 906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn to clear pointer to the data after releasing it. 916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn Passing pointer to NULL pointer is Ok: nothing happens in this case 926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn*/ 936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvFree_( void* ptr ); 946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvFree(ptr) (cvFree_(*(ptr)), *(ptr)=0) 956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Allocates and initializes IplImage header */ 976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(IplImage*) cvCreateImageHeader( CvSize size, int depth, int channels ); 986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Inializes IplImage header */ 1006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(IplImage*) cvInitImageHeader( IplImage* image, CvSize size, int depth, 1016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int channels, int origin CV_DEFAULT(0), 1026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int align CV_DEFAULT(4)); 1036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Creates IPL image (header and data) */ 1056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(IplImage*) cvCreateImage( CvSize size, int depth, int channels ); 1066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Releases (i.e. deallocates) IPL image header */ 1086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvReleaseImageHeader( IplImage** image ); 1096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Releases IPL image header and data */ 1116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvReleaseImage( IplImage** image ); 1126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Creates a copy of IPL image (widthStep may differ) */ 1146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(IplImage*) cvCloneImage( const IplImage* image ); 1156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Sets a Channel Of Interest (only a few functions support COI) - 1176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn use cvCopy to extract the selected channel and/or put it back */ 1186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvSetImageCOI( IplImage* image, int coi ); 1196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Retrieves image Channel Of Interest */ 1216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) cvGetImageCOI( const IplImage* image ); 1226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Sets image ROI (region of interest) (COI is not changed) */ 1246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvSetImageROI( IplImage* image, CvRect rect ); 1256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Resets image ROI and COI */ 1276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvResetImageROI( IplImage* image ); 1286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Retrieves image ROI */ 1306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvRect) cvGetImageROI( const IplImage* image ); 1316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Allocates and initalizes CvMat header */ 1336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvMat*) cvCreateMatHeader( int rows, int cols, int type ); 1346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_AUTOSTEP 0x7fffffff 1366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Initializes CvMat header */ 1386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvMat*) cvInitMatHeader( CvMat* mat, int rows, int cols, 1396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int type, void* data CV_DEFAULT(NULL), 1406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int step CV_DEFAULT(CV_AUTOSTEP) ); 1416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Allocates and initializes CvMat header and allocates data */ 1436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvMat*) cvCreateMat( int rows, int cols, int type ); 1446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Releases CvMat header and deallocates matrix data 1466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (reference counting is used for data) */ 1476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvReleaseMat( CvMat** mat ); 1486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Decrements CvMat data reference counter and deallocates the data if 1506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn it reaches 0 */ 1516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvDecRefData( CvArr* arr ) 1526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 1536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( CV_IS_MAT( arr )) 1546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 1556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat* mat = (CvMat*)arr; 1566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn mat->data.ptr = NULL; 1576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( mat->refcount != NULL && --*mat->refcount == 0 ) 1586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvFree( &mat->refcount ); 1596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn mat->refcount = NULL; 1606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 1616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn else if( CV_IS_MATND( arr )) 1626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 1636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMatND* mat = (CvMatND*)arr; 1646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn mat->data.ptr = NULL; 1656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( mat->refcount != NULL && --*mat->refcount == 0 ) 1666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvFree( &mat->refcount ); 1676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn mat->refcount = NULL; 1686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 1696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 1706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Increments CvMat data reference counter */ 1726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE int cvIncRefData( CvArr* arr ) 1736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 1746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int refcount = 0; 1756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( CV_IS_MAT( arr )) 1766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 1776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat* mat = (CvMat*)arr; 1786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( mat->refcount != NULL ) 1796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn refcount = ++*mat->refcount; 1806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 1816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn else if( CV_IS_MATND( arr )) 1826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 1836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMatND* mat = (CvMatND*)arr; 1846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( mat->refcount != NULL ) 1856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn refcount = ++*mat->refcount; 1866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 1876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return refcount; 1886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 1896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Creates an exact copy of the input matrix (except, may be, step value) */ 1926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvMat*) cvCloneMat( const CvMat* mat ); 1936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Makes a new matrix from <rect> subrectangle of input array. 1966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn No data is copied */ 1976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvMat*) cvGetSubRect( const CvArr* arr, CvMat* submat, CvRect rect ); 1986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvGetSubArr cvGetSubRect 1996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Selects row span of the input array: arr(start_row:delta_row:end_row,:) 2016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (end_row is not included into the span). */ 2026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvMat*) cvGetRows( const CvArr* arr, CvMat* submat, 2036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int start_row, int end_row, 2046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int delta_row CV_DEFAULT(1)); 2056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE CvMat* cvGetRow( const CvArr* arr, CvMat* submat, int row ) 2076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return cvGetRows( arr, submat, row, row + 1, 1 ); 2096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Selects column span of the input array: arr(:,start_col:end_col) 2136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (end_col is not included into the span) */ 2146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvMat*) cvGetCols( const CvArr* arr, CvMat* submat, 2156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int start_col, int end_col ); 2166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE CvMat* cvGetCol( const CvArr* arr, CvMat* submat, int col ) 2186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return cvGetCols( arr, submat, col, col + 1 ); 2206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Select a diagonal of the input array. 2236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (diag = 0 means the main diagonal, >0 means a diagonal above the main one, 2246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn <0 - below the main one). 2256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn The diagonal will be represented as a column (nx1 matrix). */ 2266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvMat*) cvGetDiag( const CvArr* arr, CvMat* submat, 2276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int diag CV_DEFAULT(0)); 2286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* low-level scalar <-> raw data conversion functions */ 2306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvScalarToRawData( const CvScalar* scalar, void* data, int type, 2316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int extend_to_12 CV_DEFAULT(0) ); 2326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvRawDataToScalar( const void* data, int type, CvScalar* scalar ); 2346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Allocates and initializes CvMatND header */ 2366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvMatND*) cvCreateMatNDHeader( int dims, const int* sizes, int type ); 2376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Allocates and initializes CvMatND header and allocates data */ 2396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvMatND*) cvCreateMatND( int dims, const int* sizes, int type ); 2406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Initializes preallocated CvMatND header */ 2426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvMatND*) cvInitMatNDHeader( CvMatND* mat, int dims, const int* sizes, 2436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int type, void* data CV_DEFAULT(NULL) ); 2446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Releases CvMatND */ 2466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvReleaseMatND( CvMatND** mat ) 2476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvReleaseMat( (CvMat**)mat ); 2496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Creates a copy of CvMatND (except, may be, steps) */ 2526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvMatND*) cvCloneMatND( const CvMatND* mat ); 2536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Allocates and initializes CvSparseMat header and allocates data */ 2556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvSparseMat*) cvCreateSparseMat( int dims, const int* sizes, int type ); 2566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Releases CvSparseMat */ 2586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvReleaseSparseMat( CvSparseMat** mat ); 2596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Creates a copy of CvSparseMat (except, may be, zero items) */ 2616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvSparseMat*) cvCloneSparseMat( const CvSparseMat* mat ); 2626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Initializes sparse array iterator 2646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (returns the first node or NULL if the array is empty) */ 2656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvSparseNode*) cvInitSparseMatIterator( const CvSparseMat* mat, 2666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSparseMatIterator* mat_iterator ); 2676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// returns next sparse array node (or NULL if there is no more nodes) 2696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE CvSparseNode* cvGetNextSparseNode( CvSparseMatIterator* mat_iterator ) 2706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( mat_iterator->node->next ) 2726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return mat_iterator->node = mat_iterator->node->next; 2736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn else 2746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 2756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int idx; 2766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for( idx = ++mat_iterator->curidx; idx < mat_iterator->mat->hashsize; idx++ ) 2776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 2786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSparseNode* node = (CvSparseNode*)mat_iterator->mat->hashtable[idx]; 2796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( node ) 2806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 2816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn mat_iterator->curidx = idx; 2826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return mat_iterator->node = node; 2836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 2846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 2856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return NULL; 2866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 2876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/**************** matrix iterator: used for n-ary operations on dense arrays *********/ 2906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MAX_ARR 10 2926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvNArrayIterator 2946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int count; /* number of arrays */ 2966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int dims; /* number of dimensions to iterate */ 2976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSize size; /* maximal common linear size: { width = size, height = 1 } */ 2986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn uchar* ptr[CV_MAX_ARR]; /* pointers to the array slices */ 2996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int stack[CV_MAX_DIM]; /* for internal use */ 3006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMatND* hdr[CV_MAX_ARR]; /* pointers to the headers of the 3016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn matrices that are processed */ 3026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 3036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvNArrayIterator; 3046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_NO_DEPTH_CHECK 1 3066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_NO_CN_CHECK 2 3076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_NO_SIZE_CHECK 4 3086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* initializes iterator that traverses through several arrays simulteneously 3106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (the function together with cvNextArraySlice is used for 3116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn N-ari element-wise operations) */ 3126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) cvInitNArrayIterator( int count, CvArr** arrs, 3136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const CvArr* mask, CvMatND* stubs, 3146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvNArrayIterator* array_iterator, 3156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int flags CV_DEFAULT(0) ); 3166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* returns zero value if iteration is finished, non-zero (slice length) otherwise */ 3186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) cvNextNArraySlice( CvNArrayIterator* array_iterator ); 3196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Returns type of array elements: 3226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_8UC1 ... CV_64FC4 ... */ 3236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) cvGetElemType( const CvArr* arr ); 3246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Retrieves number of an array dimensions and 3266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn optionally sizes of the dimensions */ 3276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) cvGetDims( const CvArr* arr, int* sizes CV_DEFAULT(NULL) ); 3286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Retrieves size of a particular array dimension. 3316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn For 2d arrays cvGetDimSize(arr,0) returns number of rows (image height) 3326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn and cvGetDimSize(arr,1) returns number of columns (image width) */ 3336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) cvGetDimSize( const CvArr* arr, int index ); 3346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* ptr = &arr(idx0,idx1,...). All indexes are zero-based, 3376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn the major dimensions go first (e.g. (y,x) for 2D, (z,y,x) for 3D */ 3386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(uchar*) cvPtr1D( const CvArr* arr, int idx0, int* type CV_DEFAULT(NULL)); 3396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(uchar*) cvPtr2D( const CvArr* arr, int idx0, int idx1, int* type CV_DEFAULT(NULL) ); 3406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(uchar*) cvPtr3D( const CvArr* arr, int idx0, int idx1, int idx2, 3416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int* type CV_DEFAULT(NULL)); 3426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* For CvMat or IplImage number of indices should be 2 3446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (row index (y) goes first, column index (x) goes next). 3456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn For CvMatND or CvSparseMat number of infices should match number of <dims> and 3466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn indices order should match the array dimension order. */ 3476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(uchar*) cvPtrND( const CvArr* arr, const int* idx, int* type CV_DEFAULT(NULL), 3486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int create_node CV_DEFAULT(1), 3496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn unsigned* precalc_hashval CV_DEFAULT(NULL)); 3506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* value = arr(idx0,idx1,...) */ 3526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvScalar) cvGet1D( const CvArr* arr, int idx0 ); 3536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvScalar) cvGet2D( const CvArr* arr, int idx0, int idx1 ); 3546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvScalar) cvGet3D( const CvArr* arr, int idx0, int idx1, int idx2 ); 3556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvScalar) cvGetND( const CvArr* arr, const int* idx ); 3566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* for 1-channel arrays */ 3586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(double) cvGetReal1D( const CvArr* arr, int idx0 ); 3596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(double) cvGetReal2D( const CvArr* arr, int idx0, int idx1 ); 3606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(double) cvGetReal3D( const CvArr* arr, int idx0, int idx1, int idx2 ); 3616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(double) cvGetRealND( const CvArr* arr, const int* idx ); 3626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* arr(idx0,idx1,...) = value */ 3646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvSet1D( CvArr* arr, int idx0, CvScalar value ); 3656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvSet2D( CvArr* arr, int idx0, int idx1, CvScalar value ); 3666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvSet3D( CvArr* arr, int idx0, int idx1, int idx2, CvScalar value ); 3676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvSetND( CvArr* arr, const int* idx, CvScalar value ); 3686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* for 1-channel arrays */ 3706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvSetReal1D( CvArr* arr, int idx0, double value ); 3716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvSetReal2D( CvArr* arr, int idx0, int idx1, double value ); 3726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvSetReal3D( CvArr* arr, int idx0, 3736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int idx1, int idx2, double value ); 3746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvSetRealND( CvArr* arr, const int* idx, double value ); 3756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* clears element of ND dense array, 3776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn in case of sparse arrays it deletes the specified node */ 3786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvClearND( CvArr* arr, const int* idx ); 3796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Converts CvArr (IplImage or CvMat,...) to CvMat. 3816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn If the last parameter is non-zero, function can 3826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn convert multi(>2)-dimensional array to CvMat as long as 3836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn the last array's dimension is continous. The resultant 3846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn matrix will be have appropriate (a huge) number of rows */ 3856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvMat*) cvGetMat( const CvArr* arr, CvMat* header, 3866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int* coi CV_DEFAULT(NULL), 3876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int allowND CV_DEFAULT(0)); 3886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Converts CvArr (IplImage or CvMat) to IplImage */ 3906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(IplImage*) cvGetImage( const CvArr* arr, IplImage* image_header ); 3916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Changes a shape of multi-dimensional array. 3946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn new_cn == 0 means that number of channels remains unchanged. 3956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn new_dims == 0 means that number and sizes of dimensions remain the same 3966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (unless they need to be changed to set the new number of channels) 3976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if new_dims == 1, there is no need to specify new dimension sizes 3986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn The resultant configuration should be achievable w/o data copying. 3996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn If the resultant array is sparse, CvSparseMat header should be passed 4006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn to the function else if the result is 1 or 2 dimensional, 4016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat header should be passed to the function 4026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn else CvMatND header should be passed */ 4036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvArr*) cvReshapeMatND( const CvArr* arr, 4046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int sizeof_header, CvArr* header, 4056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int new_cn, int new_dims, int* new_sizes ); 4066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvReshapeND( arr, header, new_cn, new_dims, new_sizes ) \ 4086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvReshapeMatND( (arr), sizeof(*(header)), (header), \ 4096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (new_cn), (new_dims), (new_sizes)) 4106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvMat*) cvReshape( const CvArr* arr, CvMat* header, 4126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int new_cn, int new_rows CV_DEFAULT(0) ); 4136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Repeats source 2d array several times in both horizontal and 4156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn vertical direction to fill destination array */ 4166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvRepeat( const CvArr* src, CvArr* dst ); 4176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Allocates array data */ 4196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvCreateData( CvArr* arr ); 4206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Releases array data */ 4226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvReleaseData( CvArr* arr ); 4236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Attaches user data to the array header. The step is reffered to 4256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn the pre-last dimension. That is, all the planes of the array 4266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn must be joint (w/o gaps) */ 4276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvSetData( CvArr* arr, void* data, int step ); 4286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Retrieves raw data of CvMat, IplImage or CvMatND. 4306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn In the latter case the function raises an error if 4316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn the array can not be represented as a matrix */ 4326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvGetRawData( const CvArr* arr, uchar** data, 4336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int* step CV_DEFAULT(NULL), 4346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSize* roi_size CV_DEFAULT(NULL)); 4356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Returns width and height of array in elements */ 4376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvSize) cvGetSize( const CvArr* arr ); 4386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Copies source array to destination array */ 4406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvCopy( const CvArr* src, CvArr* dst, 4416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const CvArr* mask CV_DEFAULT(NULL) ); 4426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Sets all or "masked" elements of input array 4446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn to the same value*/ 4456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvSet( CvArr* arr, CvScalar value, 4466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const CvArr* mask CV_DEFAULT(NULL) ); 4476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Clears all the array elements (sets them to 0) */ 4496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvSetZero( CvArr* arr ); 4506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvZero cvSetZero 4516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Splits a multi-channel array into the set of single-channel arrays or 4546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn extracts particular [color] plane */ 4556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvSplit( const CvArr* src, CvArr* dst0, CvArr* dst1, 4566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvArr* dst2, CvArr* dst3 ); 4576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Merges a set of single-channel arrays into the single multi-channel array 4596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn or inserts one particular [color] plane to the array */ 4606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvMerge( const CvArr* src0, const CvArr* src1, 4616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const CvArr* src2, const CvArr* src3, 4626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvArr* dst ); 4636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Copies several channels from input arrays to 4656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn certain channels of output arrays */ 4666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvMixChannels( const CvArr** src, int src_count, 4676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvArr** dst, int dst_count, 4686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const int* from_to, int pair_count ); 4696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Performs linear transformation on every source array element: 4716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn dst(x,y,c) = scale*src(x,y,c)+shift. 4726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn Arbitrary combination of input and output array depths are allowed 4736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (number of channels must be the same), thus the function can be used 4746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for type conversion */ 4756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvConvertScale( const CvArr* src, CvArr* dst, 4766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double scale CV_DEFAULT(1), 4776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double shift CV_DEFAULT(0) ); 4786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvCvtScale cvConvertScale 4796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvScale cvConvertScale 4806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvConvert( src, dst ) cvConvertScale( (src), (dst), 1, 0 ) 4816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Performs linear transformation on every source array element, 4846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn stores absolute value of the result: 4856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn dst(x,y,c) = abs(scale*src(x,y,c)+shift). 4866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn destination array must have 8u type. 4876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn In other cases one may use cvConvertScale + cvAbsDiffS */ 4886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvConvertScaleAbs( const CvArr* src, CvArr* dst, 4896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double scale CV_DEFAULT(1), 4906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double shift CV_DEFAULT(0) ); 4916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvCvtScaleAbs cvConvertScaleAbs 4926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* checks termination criteria validity and 4956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn sets eps to default_eps (if it is not set), 4966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn max_iter to default_max_iters (if it is not set) 4976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn*/ 4986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvTermCriteria) cvCheckTermCriteria( CvTermCriteria criteria, 4996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double default_eps, 5006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int default_max_iters ); 5016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/****************************************************************************************\ 5036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn* Arithmetic, logic and comparison operations * 5046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn\****************************************************************************************/ 5056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* dst(mask) = src1(mask) + src2(mask) */ 5076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvAdd( const CvArr* src1, const CvArr* src2, CvArr* dst, 5086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const CvArr* mask CV_DEFAULT(NULL)); 5096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* dst(mask) = src(mask) + value */ 5116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvAddS( const CvArr* src, CvScalar value, CvArr* dst, 5126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const CvArr* mask CV_DEFAULT(NULL)); 5136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* dst(mask) = src1(mask) - src2(mask) */ 5156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvSub( const CvArr* src1, const CvArr* src2, CvArr* dst, 5166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const CvArr* mask CV_DEFAULT(NULL)); 5176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* dst(mask) = src(mask) - value = src(mask) + (-value) */ 5196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvSubS( const CvArr* src, CvScalar value, CvArr* dst, 5206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const CvArr* mask CV_DEFAULT(NULL)) 5216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 5226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvAddS( src, cvScalar( -value.val[0], -value.val[1], -value.val[2], -value.val[3]), 5236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn dst, mask ); 5246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 5256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* dst(mask) = value - src(mask) */ 5276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvSubRS( const CvArr* src, CvScalar value, CvArr* dst, 5286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const CvArr* mask CV_DEFAULT(NULL)); 5296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* dst(idx) = src1(idx) * src2(idx) * scale 5316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (scaled element-wise multiplication of 2 arrays) */ 5326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvMul( const CvArr* src1, const CvArr* src2, 5336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvArr* dst, double scale CV_DEFAULT(1) ); 5346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* element-wise division/inversion with scaling: 5366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn dst(idx) = src1(idx) * scale / src2(idx) 5376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn or dst(idx) = scale / src2(idx) if src1 == 0 */ 5386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvDiv( const CvArr* src1, const CvArr* src2, 5396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvArr* dst, double scale CV_DEFAULT(1)); 5406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* dst = src1 * scale + src2 */ 5426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvScaleAdd( const CvArr* src1, CvScalar scale, 5436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const CvArr* src2, CvArr* dst ); 5446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvAXPY( A, real_scalar, B, C ) cvScaleAdd(A, cvRealScalar(real_scalar), B, C) 5456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* dst = src1 * alpha + src2 * beta + gamma */ 5476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvAddWeighted( const CvArr* src1, double alpha, 5486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const CvArr* src2, double beta, 5496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double gamma, CvArr* dst ); 5506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* result = sum_i(src1(i) * src2(i)) (results for all channels are accumulated together) */ 5526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(double) cvDotProduct( const CvArr* src1, const CvArr* src2 ); 5536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* dst(idx) = src1(idx) & src2(idx) */ 5556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvAnd( const CvArr* src1, const CvArr* src2, 5566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvArr* dst, const CvArr* mask CV_DEFAULT(NULL)); 5576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* dst(idx) = src(idx) & value */ 5596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvAndS( const CvArr* src, CvScalar value, 5606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvArr* dst, const CvArr* mask CV_DEFAULT(NULL)); 5616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* dst(idx) = src1(idx) | src2(idx) */ 5636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvOr( const CvArr* src1, const CvArr* src2, 5646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvArr* dst, const CvArr* mask CV_DEFAULT(NULL)); 5656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* dst(idx) = src(idx) | value */ 5676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvOrS( const CvArr* src, CvScalar value, 5686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvArr* dst, const CvArr* mask CV_DEFAULT(NULL)); 5696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* dst(idx) = src1(idx) ^ src2(idx) */ 5716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvXor( const CvArr* src1, const CvArr* src2, 5726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvArr* dst, const CvArr* mask CV_DEFAULT(NULL)); 5736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* dst(idx) = src(idx) ^ value */ 5756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvXorS( const CvArr* src, CvScalar value, 5766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvArr* dst, const CvArr* mask CV_DEFAULT(NULL)); 5776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* dst(idx) = ~src(idx) */ 5796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvNot( const CvArr* src, CvArr* dst ); 5806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* dst(idx) = lower(idx) <= src(idx) < upper(idx) */ 5826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvInRange( const CvArr* src, const CvArr* lower, 5836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const CvArr* upper, CvArr* dst ); 5846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* dst(idx) = lower <= src(idx) < upper */ 5866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvInRangeS( const CvArr* src, CvScalar lower, 5876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvScalar upper, CvArr* dst ); 5886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_CMP_EQ 0 5906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_CMP_GT 1 5916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_CMP_GE 2 5926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_CMP_LT 3 5936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_CMP_LE 4 5946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_CMP_NE 5 5956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* The comparison operation support single-channel arrays only. 5976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn Destination image should be 8uC1 or 8sC1 */ 5986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* dst(idx) = src1(idx) _cmp_op_ src2(idx) */ 6006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvCmp( const CvArr* src1, const CvArr* src2, CvArr* dst, int cmp_op ); 6016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* dst(idx) = src1(idx) _cmp_op_ value */ 6036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvCmpS( const CvArr* src, double value, CvArr* dst, int cmp_op ); 6046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* dst(idx) = min(src1(idx),src2(idx)) */ 6066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvMin( const CvArr* src1, const CvArr* src2, CvArr* dst ); 6076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* dst(idx) = max(src1(idx),src2(idx)) */ 6096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvMax( const CvArr* src1, const CvArr* src2, CvArr* dst ); 6106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* dst(idx) = min(src(idx),value) */ 6126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvMinS( const CvArr* src, double value, CvArr* dst ); 6136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* dst(idx) = max(src(idx),value) */ 6156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvMaxS( const CvArr* src, double value, CvArr* dst ); 6166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* dst(x,y,c) = abs(src1(x,y,c) - src2(x,y,c)) */ 6186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvAbsDiff( const CvArr* src1, const CvArr* src2, CvArr* dst ); 6196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* dst(x,y,c) = abs(src(x,y,c) - value(c)) */ 6216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvAbsDiffS( const CvArr* src, CvArr* dst, CvScalar value ); 6226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvAbs( src, dst ) cvAbsDiffS( (src), (dst), cvScalarAll(0)) 6236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/****************************************************************************************\ 6256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn* Math operations * 6266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn\****************************************************************************************/ 6276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Does cartesian->polar coordinates conversion. 6296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn Either of output components (magnitude or angle) is optional */ 6306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvCartToPolar( const CvArr* x, const CvArr* y, 6316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvArr* magnitude, CvArr* angle CV_DEFAULT(NULL), 6326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int angle_in_degrees CV_DEFAULT(0)); 6336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Does polar->cartesian coordinates conversion. 6356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn Either of output components (magnitude or angle) is optional. 6366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn If magnitude is missing it is assumed to be all 1's */ 6376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvPolarToCart( const CvArr* magnitude, const CvArr* angle, 6386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvArr* x, CvArr* y, 6396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int angle_in_degrees CV_DEFAULT(0)); 6406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Does powering: dst(idx) = src(idx)^power */ 6426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvPow( const CvArr* src, CvArr* dst, double power ); 6436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Does exponention: dst(idx) = exp(src(idx)). 6456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn Overflow is not handled yet. Underflow is handled. 6466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn Maximal relative error is ~7e-6 for single-precision input */ 6476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvExp( const CvArr* src, CvArr* dst ); 6486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Calculates natural logarithms: dst(idx) = log(abs(src(idx))). 6506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn Logarithm of 0 gives large negative number(~-700) 6516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn Maximal relative error is ~3e-7 for single-precision output 6526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn*/ 6536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvLog( const CvArr* src, CvArr* dst ); 6546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Fast arctangent calculation */ 6566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(float) cvFastArctan( float y, float x ); 6576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Fast cubic root calculation */ 6596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(float) cvCbrt( float value ); 6606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Checks array values for NaNs, Infs or simply for too large numbers 6626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (if CV_CHECK_RANGE is set). If CV_CHECK_QUIET is set, 6636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn no runtime errors is raised (function returns zero value in case of "bad" values). 6646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn Otherwise cvError is called */ 6656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_CHECK_RANGE 1 6666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_CHECK_QUIET 2 6676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) cvCheckArr( const CvArr* arr, int flags CV_DEFAULT(0), 6686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double min_val CV_DEFAULT(0), double max_val CV_DEFAULT(0)); 6696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvCheckArray cvCheckArr 6706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_RAND_UNI 0 6726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_RAND_NORMAL 1 6736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvRandArr( CvRNG* rng, CvArr* arr, int dist_type, 6746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvScalar param1, CvScalar param2 ); 6756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvRandShuffle( CvArr* mat, CvRNG* rng, 6776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double iter_factor CV_DEFAULT(1.)); 6786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SORT_EVERY_ROW 0 6806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SORT_EVERY_COLUMN 1 6816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SORT_ASCENDING 0 6826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SORT_DESCENDING 16 6836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvSort( const CvArr* src, CvArr* dst CV_DEFAULT(NULL), 6856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvArr* idxmat CV_DEFAULT(NULL), 6866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int flags CV_DEFAULT(0)); 6876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Finds real roots of a cubic equation */ 6896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) cvSolveCubic( const CvMat* coeffs, CvMat* roots ); 6906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Finds all real and complex roots of a polynomial equation */ 6926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvSolvePoly(const CvMat* coeffs, CvMat *roots, 6936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int maxiter CV_DEFAULT(0), int fig CV_DEFAULT(0)); 6946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/****************************************************************************************\ 6966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn* Matrix operations * 6976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn\****************************************************************************************/ 6986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Calculates cross product of two 3d vectors */ 7006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvCrossProduct( const CvArr* src1, const CvArr* src2, CvArr* dst ); 7016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Matrix transform: dst = A*B + C, C is optional */ 7036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvMatMulAdd( src1, src2, src3, dst ) cvGEMM( (src1), (src2), 1., (src3), 1., (dst), 0 ) 7046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvMatMul( src1, src2, dst ) cvMatMulAdd( (src1), (src2), NULL, (dst)) 7056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_GEMM_A_T 1 7076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_GEMM_B_T 2 7086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_GEMM_C_T 4 7096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Extended matrix transform: 7106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn dst = alpha*op(A)*op(B) + beta*op(C), where op(X) is X or X^T */ 7116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvGEMM( const CvArr* src1, const CvArr* src2, double alpha, 7126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const CvArr* src3, double beta, CvArr* dst, 7136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int tABC CV_DEFAULT(0)); 7146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvMatMulAddEx cvGEMM 7156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Transforms each element of source array and stores 7176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn resultant vectors in destination array */ 7186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvTransform( const CvArr* src, CvArr* dst, 7196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const CvMat* transmat, 7206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const CvMat* shiftvec CV_DEFAULT(NULL)); 7216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvMatMulAddS cvTransform 7226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Does perspective transform on every element of input array */ 7246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvPerspectiveTransform( const CvArr* src, CvArr* dst, 7256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const CvMat* mat ); 7266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Calculates (A-delta)*(A-delta)^T (order=0) or (A-delta)^T*(A-delta) (order=1) */ 7286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvMulTransposed( const CvArr* src, CvArr* dst, int order, 7296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const CvArr* delta CV_DEFAULT(NULL), 7306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double scale CV_DEFAULT(1.) ); 7316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Tranposes matrix. Square matrices can be transposed in-place */ 7336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvTranspose( const CvArr* src, CvArr* dst ); 7346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvT cvTranspose 7356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Completes the symmetric matrix from the lower (LtoR=0) or from the upper (LtoR!=0) part */ 7376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvCompleteSymm( CvMat* matrix, int LtoR CV_DEFAULT(0) ); 7386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Mirror array data around horizontal (flip=0), 7406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn vertical (flip=1) or both(flip=-1) axises: 7416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvFlip(src) flips images vertically and sequences horizontally (inplace) */ 7426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvFlip( const CvArr* src, CvArr* dst CV_DEFAULT(NULL), 7436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int flip_mode CV_DEFAULT(0)); 7446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvMirror cvFlip 7456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SVD_MODIFY_A 1 7486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SVD_U_T 2 7496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SVD_V_T 4 7506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Performs Singular Value Decomposition of a matrix */ 7526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvSVD( CvArr* A, CvArr* W, CvArr* U CV_DEFAULT(NULL), 7536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvArr* V CV_DEFAULT(NULL), int flags CV_DEFAULT(0)); 7546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Performs Singular Value Back Substitution (solves A*X = B): 7566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn flags must be the same as in cvSVD */ 7576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvSVBkSb( const CvArr* W, const CvArr* U, 7586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const CvArr* V, const CvArr* B, 7596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvArr* X, int flags ); 7606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_LU 0 7626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SVD 1 7636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SVD_SYM 2 7646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_LSQ 8 7656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Inverts matrix */ 7676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(double) cvInvert( const CvArr* src, CvArr* dst, 7686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int method CV_DEFAULT(CV_LU)); 7696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvInv cvInvert 7706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Solves linear system (src1)*(dst) = (src2) 7726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (returns 0 if src1 is a singular and CV_LU method is used) */ 7736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) cvSolve( const CvArr* src1, const CvArr* src2, CvArr* dst, 7746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int method CV_DEFAULT(CV_LU)); 7756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Calculates determinant of input matrix */ 7776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(double) cvDet( const CvArr* mat ); 7786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Calculates trace of the matrix (sum of elements on the main diagonal) */ 7806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvScalar) cvTrace( const CvArr* mat ); 7816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Finds eigen values and vectors of a symmetric matrix */ 7836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvEigenVV( CvArr* mat, CvArr* evects, 7846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvArr* evals, double eps CV_DEFAULT(0)); 7856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Makes an identity matrix (mat_ij = i == j) */ 7876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvSetIdentity( CvArr* mat, CvScalar value CV_DEFAULT(cvRealScalar(1)) ); 7886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Fills matrix with given range of numbers */ 7906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvArr*) cvRange( CvArr* mat, double start, double end ); 7916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Calculates covariation matrix for a set of vectors */ 7936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* transpose([v1-avg, v2-avg,...]) * [v1-avg,v2-avg,...] */ 7946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_COVAR_SCRAMBLED 0 7956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* [v1-avg, v2-avg,...] * transpose([v1-avg,v2-avg,...]) */ 7976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_COVAR_NORMAL 1 7986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* do not calc average (i.e. mean vector) - use the input vector instead 8006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (useful for calculating covariance matrix by parts) */ 8016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_COVAR_USE_AVG 2 8026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* scale the covariance matrix coefficients by number of the vectors */ 8046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_COVAR_SCALE 4 8056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* all the input vectors are stored in a single matrix, as its rows */ 8076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_COVAR_ROWS 8 8086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* all the input vectors are stored in a single matrix, as its columns */ 8106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_COVAR_COLS 16 8116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvCalcCovarMatrix( const CvArr** vects, int count, 8136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvArr* cov_mat, CvArr* avg, int flags ); 8146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_PCA_DATA_AS_ROW 0 8166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_PCA_DATA_AS_COL 1 8176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_PCA_USE_AVG 2 8186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvCalcPCA( const CvArr* data, CvArr* mean, 8196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvArr* eigenvals, CvArr* eigenvects, int flags ); 8206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvProjectPCA( const CvArr* data, const CvArr* mean, 8226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const CvArr* eigenvects, CvArr* result ); 8236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvBackProjectPCA( const CvArr* proj, const CvArr* mean, 8256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const CvArr* eigenvects, CvArr* result ); 8266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Calculates Mahalanobis(weighted) distance */ 8286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(double) cvMahalanobis( const CvArr* vec1, const CvArr* vec2, CvArr* mat ); 8296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvMahalonobis cvMahalanobis 8306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/****************************************************************************************\ 8326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn* Array Statistics * 8336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn\****************************************************************************************/ 8346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Finds sum of array elements */ 8366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvScalar) cvSum( const CvArr* arr ); 8376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Calculates number of non-zero pixels */ 8396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) cvCountNonZero( const CvArr* arr ); 8406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Calculates mean value of array elements */ 8426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvScalar) cvAvg( const CvArr* arr, const CvArr* mask CV_DEFAULT(NULL) ); 8436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Calculates mean and standard deviation of pixel values */ 8456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvAvgSdv( const CvArr* arr, CvScalar* mean, CvScalar* std_dev, 8466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const CvArr* mask CV_DEFAULT(NULL) ); 8476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Finds global minimum, maximum and their positions */ 8496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvMinMaxLoc( const CvArr* arr, double* min_val, double* max_val, 8506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvPoint* min_loc CV_DEFAULT(NULL), 8516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvPoint* max_loc CV_DEFAULT(NULL), 8526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const CvArr* mask CV_DEFAULT(NULL) ); 8536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* types of array norm */ 8556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_C 1 8566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_L1 2 8576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_L2 4 8586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_NORM_MASK 7 8596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_RELATIVE 8 8606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_DIFF 16 8616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MINMAX 32 8626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_DIFF_C (CV_DIFF | CV_C) 8646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_DIFF_L1 (CV_DIFF | CV_L1) 8656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_DIFF_L2 (CV_DIFF | CV_L2) 8666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_RELATIVE_C (CV_RELATIVE | CV_C) 8676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_RELATIVE_L1 (CV_RELATIVE | CV_L1) 8686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_RELATIVE_L2 (CV_RELATIVE | CV_L2) 8696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Finds norm, difference norm or relative difference norm for an array (or two arrays) */ 8716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(double) cvNorm( const CvArr* arr1, const CvArr* arr2 CV_DEFAULT(NULL), 8726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int norm_type CV_DEFAULT(CV_L2), 8736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const CvArr* mask CV_DEFAULT(NULL) ); 8746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvNormalize( const CvArr* src, CvArr* dst, 8766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double a CV_DEFAULT(1.), double b CV_DEFAULT(0.), 8776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int norm_type CV_DEFAULT(CV_L2), 8786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const CvArr* mask CV_DEFAULT(NULL) ); 8796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_REDUCE_SUM 0 8826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_REDUCE_AVG 1 8836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_REDUCE_MAX 2 8846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_REDUCE_MIN 3 8856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvReduce( const CvArr* src, CvArr* dst, int dim CV_DEFAULT(-1), 8876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int op CV_DEFAULT(CV_REDUCE_SUM) ); 8886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/****************************************************************************************\ 8906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn* Discrete Linear Transforms and Related Functions * 8916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn\****************************************************************************************/ 8926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_DXT_FORWARD 0 8946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_DXT_INVERSE 1 8956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_DXT_SCALE 2 /* divide result by size of array */ 8966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_DXT_INV_SCALE (CV_DXT_INVERSE + CV_DXT_SCALE) 8976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_DXT_INVERSE_SCALE CV_DXT_INV_SCALE 8986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_DXT_ROWS 4 /* transform each row individually */ 8996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_DXT_MUL_CONJ 8 /* conjugate the second argument of cvMulSpectrums */ 9006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Discrete Fourier Transform: 9026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn complex->complex, 9036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn real->ccs (forward), 9046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ccs->real (inverse) */ 9056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvDFT( const CvArr* src, CvArr* dst, int flags, 9066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int nonzero_rows CV_DEFAULT(0) ); 9076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvFFT cvDFT 9086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Multiply results of DFTs: DFT(X)*DFT(Y) or DFT(X)*conj(DFT(Y)) */ 9106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvMulSpectrums( const CvArr* src1, const CvArr* src2, 9116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvArr* dst, int flags ); 9126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Finds optimal DFT vector size >= size0 */ 9146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) cvGetOptimalDFTSize( int size0 ); 9156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Discrete Cosine Transform */ 9176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvDCT( const CvArr* src, CvArr* dst, int flags ); 9186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/****************************************************************************************\ 9206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn* Dynamic data structures * 9216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn\****************************************************************************************/ 9226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Calculates length of sequence slice (with support of negative indices). */ 9246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) cvSliceLength( CvSlice slice, const CvSeq* seq ); 9256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Creates new memory storage. 9286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn block_size == 0 means that default, 9296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn somewhat optimal size, is used (currently, it is 64K) */ 9306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvMemStorage*) cvCreateMemStorage( int block_size CV_DEFAULT(0)); 9316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Creates a memory storage that will borrow memory blocks from parent storage */ 9346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvMemStorage*) cvCreateChildMemStorage( CvMemStorage* parent ); 9356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Releases memory storage. All the children of a parent must be released before 9386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn the parent. A child storage returns all the blocks to parent when it is released */ 9396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvReleaseMemStorage( CvMemStorage** storage ); 9406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Clears memory storage. This is the only way(!!!) (besides cvRestoreMemStoragePos) 9436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn to reuse memory allocated for the storage - cvClearSeq,cvClearSet ... 9446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn do not free any memory. 9456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn A child storage returns all the blocks to the parent when it is cleared */ 9466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvClearMemStorage( CvMemStorage* storage ); 9476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Remember a storage "free memory" position */ 9496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvSaveMemStoragePos( const CvMemStorage* storage, CvMemStoragePos* pos ); 9506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Restore a storage "free memory" position */ 9526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvRestoreMemStoragePos( CvMemStorage* storage, CvMemStoragePos* pos ); 9536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Allocates continuous buffer of the specified size in the storage */ 9556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void*) cvMemStorageAlloc( CvMemStorage* storage, size_t size ); 9566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Allocates string in memory storage */ 9586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvString) cvMemStorageAllocString( CvMemStorage* storage, const char* ptr, 9596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int len CV_DEFAULT(-1) ); 9606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Creates new empty sequence that will reside in the specified storage */ 9626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvSeq*) cvCreateSeq( int seq_flags, int header_size, 9636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int elem_size, CvMemStorage* storage ); 9646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Changes default size (granularity) of sequence blocks. 9666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn The default size is ~1Kbyte */ 9676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvSetSeqBlockSize( CvSeq* seq, int delta_elems ); 9686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Adds new element to the end of sequence. Returns pointer to the element */ 9716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(schar*) cvSeqPush( CvSeq* seq, void* element CV_DEFAULT(NULL)); 9726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Adds new element to the beginning of sequence. Returns pointer to it */ 9756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(schar*) cvSeqPushFront( CvSeq* seq, void* element CV_DEFAULT(NULL)); 9766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Removes the last element from sequence and optionally saves it */ 9796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvSeqPop( CvSeq* seq, void* element CV_DEFAULT(NULL)); 9806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Removes the first element from sequence and optioanally saves it */ 9836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvSeqPopFront( CvSeq* seq, void* element CV_DEFAULT(NULL)); 9846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_FRONT 1 9876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_BACK 0 9886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Adds several new elements to the end of sequence */ 9896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvSeqPushMulti( CvSeq* seq, void* elements, 9906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int count, int in_front CV_DEFAULT(0) ); 9916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Removes several elements from the end of sequence and optionally saves them */ 9936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvSeqPopMulti( CvSeq* seq, void* elements, 9946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int count, int in_front CV_DEFAULT(0) ); 9956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Inserts a new element in the middle of sequence. 9976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvSeqInsert(seq,0,elem) == cvSeqPushFront(seq,elem) */ 9986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(schar*) cvSeqInsert( CvSeq* seq, int before_index, 9996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void* element CV_DEFAULT(NULL)); 10006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Removes specified sequence element */ 10026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvSeqRemove( CvSeq* seq, int index ); 10036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Removes all the elements from the sequence. The freed memory 10066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn can be reused later only by the same sequence unless cvClearMemStorage 10076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn or cvRestoreMemStoragePos is called */ 10086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvClearSeq( CvSeq* seq ); 10096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Retrieves pointer to specified sequence element. 10126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn Negative indices are supported and mean counting from the end 10136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (e.g -1 means the last sequence element) */ 10146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(schar*) cvGetSeqElem( const CvSeq* seq, int index ); 10156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Calculates index of the specified sequence element. 10176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn Returns -1 if element does not belong to the sequence */ 10186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) cvSeqElemIdx( const CvSeq* seq, const void* element, 10196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSeqBlock** block CV_DEFAULT(NULL) ); 10206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Initializes sequence writer. The new elements will be added to the end of sequence */ 10226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvStartAppendToSeq( CvSeq* seq, CvSeqWriter* writer ); 10236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Combination of cvCreateSeq and cvStartAppendToSeq */ 10266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvStartWriteSeq( int seq_flags, int header_size, 10276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int elem_size, CvMemStorage* storage, 10286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSeqWriter* writer ); 10296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Closes sequence writer, updates sequence header and returns pointer 10316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn to the resultant sequence 10326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (which may be useful if the sequence was created using cvStartWriteSeq)) 10336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn*/ 10346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvSeq*) cvEndWriteSeq( CvSeqWriter* writer ); 10356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Updates sequence header. May be useful to get access to some of previously 10386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn written elements via cvGetSeqElem or sequence reader */ 10396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvFlushSeqWriter( CvSeqWriter* writer ); 10406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Initializes sequence reader. 10436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn The sequence can be read in forward or backward direction */ 10446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvStartReadSeq( const CvSeq* seq, CvSeqReader* reader, 10456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int reverse CV_DEFAULT(0) ); 10466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Returns current sequence reader position (currently observed sequence element) */ 10496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) cvGetSeqReaderPos( CvSeqReader* reader ); 10506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Changes sequence reader position. It may seek to an absolute or 10536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn to relative to the current position */ 10546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvSetSeqReaderPos( CvSeqReader* reader, int index, 10556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int is_relative CV_DEFAULT(0)); 10566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Copies sequence content to a continuous piece of memory */ 10586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void*) cvCvtSeqToArray( const CvSeq* seq, void* elements, 10596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSlice slice CV_DEFAULT(CV_WHOLE_SEQ) ); 10606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Creates sequence header for array. 10626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn After that all the operations on sequences that do not alter the content 10636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn can be applied to the resultant sequence */ 10646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvSeq*) cvMakeSeqHeaderForArray( int seq_type, int header_size, 10656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int elem_size, void* elements, int total, 10666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSeq* seq, CvSeqBlock* block ); 10676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Extracts sequence slice (with or without copying sequence elements) */ 10696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvSeq*) cvSeqSlice( const CvSeq* seq, CvSlice slice, 10706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMemStorage* storage CV_DEFAULT(NULL), 10716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int copy_data CV_DEFAULT(0)); 10726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE CvSeq* cvCloneSeq( const CvSeq* seq, CvMemStorage* storage CV_DEFAULT(NULL)) 10746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 10756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return cvSeqSlice( seq, CV_WHOLE_SEQ, storage, 1 ); 10766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 10776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Removes sequence slice */ 10796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvSeqRemoveSlice( CvSeq* seq, CvSlice slice ); 10806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Inserts a sequence or array into another sequence */ 10826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvSeqInsertSlice( CvSeq* seq, int before_index, const CvArr* from_arr ); 10836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* a < b ? -1 : a > b ? 1 : 0 */ 10856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef int (CV_CDECL* CvCmpFunc)(const void* a, const void* b, void* userdata ); 10866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Sorts sequence in-place given element comparison function */ 10886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvSeqSort( CvSeq* seq, CvCmpFunc func, void* userdata CV_DEFAULT(NULL) ); 10896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Finds element in a [sorted] sequence */ 10916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(schar*) cvSeqSearch( CvSeq* seq, const void* elem, CvCmpFunc func, 10926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int is_sorted, int* elem_idx, 10936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void* userdata CV_DEFAULT(NULL) ); 10946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Reverses order of sequence elements in-place */ 10966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvSeqInvert( CvSeq* seq ); 10976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Splits sequence into one or more equivalence classes using the specified criteria */ 10996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) cvSeqPartition( const CvSeq* seq, CvMemStorage* storage, 11006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSeq** labels, CvCmpFunc is_equal, void* userdata ); 11016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/************ Internal sequence functions ************/ 11036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvChangeSeqBlock( void* reader, int direction ); 11046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvCreateSeqBlock( CvSeqWriter* writer ); 11056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Creates a new set */ 11086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvSet*) cvCreateSet( int set_flags, int header_size, 11096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int elem_size, CvMemStorage* storage ); 11106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Adds new element to the set and returns pointer to it */ 11126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) cvSetAdd( CvSet* set_header, CvSetElem* elem CV_DEFAULT(NULL), 11136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSetElem** inserted_elem CV_DEFAULT(NULL) ); 11146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Fast variant of cvSetAdd */ 11166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE CvSetElem* cvSetNew( CvSet* set_header ) 11176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 11186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSetElem* elem = set_header->free_elems; 11196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( elem ) 11206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 11216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn set_header->free_elems = elem->next_free; 11226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn elem->flags = elem->flags & CV_SET_ELEM_IDX_MASK; 11236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn set_header->active_count++; 11246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 11256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn else 11266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvSetAdd( set_header, NULL, (CvSetElem**)&elem ); 11276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return elem; 11286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 11296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Removes set element given its pointer */ 11316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvSetRemoveByPtr( CvSet* set_header, void* elem ) 11326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 11336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSetElem* _elem = (CvSetElem*)elem; 11346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn assert( _elem->flags >= 0 /*&& (elem->flags & CV_SET_ELEM_IDX_MASK) < set_header->total*/ ); 11356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn _elem->next_free = set_header->free_elems; 11366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn _elem->flags = (_elem->flags & CV_SET_ELEM_IDX_MASK) | CV_SET_ELEM_FREE_FLAG; 11376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn set_header->free_elems = _elem; 11386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn set_header->active_count--; 11396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 11406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Removes element from the set by its index */ 11426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvSetRemove( CvSet* set_header, int index ); 11436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Returns a set element by index. If the element doesn't belong to the set, 11456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn NULL is returned */ 11466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE CvSetElem* cvGetSetElem( const CvSet* set_header, int index ) 11476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 11486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSetElem* elem = (CvSetElem*)cvGetSeqElem( (CvSeq*)set_header, index ); 11496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return elem && CV_IS_SET_ELEM( elem ) ? elem : 0; 11506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 11516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Removes all the elements from the set */ 11536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvClearSet( CvSet* set_header ); 11546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Creates new graph */ 11566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvGraph*) cvCreateGraph( int graph_flags, int header_size, 11576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int vtx_size, int edge_size, 11586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMemStorage* storage ); 11596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Adds new vertex to the graph */ 11616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) cvGraphAddVtx( CvGraph* graph, const CvGraphVtx* vtx CV_DEFAULT(NULL), 11626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvGraphVtx** inserted_vtx CV_DEFAULT(NULL) ); 11636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Removes vertex from the graph together with all incident edges */ 11666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) cvGraphRemoveVtx( CvGraph* graph, int index ); 11676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) cvGraphRemoveVtxByPtr( CvGraph* graph, CvGraphVtx* vtx ); 11686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Link two vertices specifed by indices or pointers if they 11716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn are not connected or return pointer to already existing edge 11726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn connecting the vertices. 11736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn Functions return 1 if a new edge was created, 0 otherwise */ 11746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) cvGraphAddEdge( CvGraph* graph, 11756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int start_idx, int end_idx, 11766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const CvGraphEdge* edge CV_DEFAULT(NULL), 11776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvGraphEdge** inserted_edge CV_DEFAULT(NULL) ); 11786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) cvGraphAddEdgeByPtr( CvGraph* graph, 11806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvGraphVtx* start_vtx, CvGraphVtx* end_vtx, 11816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const CvGraphEdge* edge CV_DEFAULT(NULL), 11826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvGraphEdge** inserted_edge CV_DEFAULT(NULL) ); 11836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Remove edge connecting two vertices */ 11856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvGraphRemoveEdge( CvGraph* graph, int start_idx, int end_idx ); 11866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvGraphRemoveEdgeByPtr( CvGraph* graph, CvGraphVtx* start_vtx, 11876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvGraphVtx* end_vtx ); 11886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Find edge connecting two vertices */ 11906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvGraphEdge*) cvFindGraphEdge( const CvGraph* graph, int start_idx, int end_idx ); 11916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvGraphEdge*) cvFindGraphEdgeByPtr( const CvGraph* graph, 11926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const CvGraphVtx* start_vtx, 11936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const CvGraphVtx* end_vtx ); 11946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvGraphFindEdge cvFindGraphEdge 11956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvGraphFindEdgeByPtr cvFindGraphEdgeByPtr 11966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Remove all vertices and edges from the graph */ 11986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvClearGraph( CvGraph* graph ); 11996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Count number of edges incident to the vertex */ 12026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) cvGraphVtxDegree( const CvGraph* graph, int vtx_idx ); 12036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) cvGraphVtxDegreeByPtr( const CvGraph* graph, const CvGraphVtx* vtx ); 12046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Retrieves graph vertex by given index */ 12076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvGetGraphVtx( graph, idx ) (CvGraphVtx*)cvGetSetElem((CvSet*)(graph), (idx)) 12086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Retrieves index of a graph vertex given its pointer */ 12106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvGraphVtxIdx( graph, vtx ) ((vtx)->flags & CV_SET_ELEM_IDX_MASK) 12116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Retrieves index of a graph edge given its pointer */ 12136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvGraphEdgeIdx( graph, edge ) ((edge)->flags & CV_SET_ELEM_IDX_MASK) 12146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvGraphGetVtxCount( graph ) ((graph)->active_count) 12166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvGraphGetEdgeCount( graph ) ((graph)->edges->active_count) 12176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_GRAPH_VERTEX 1 12196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_GRAPH_TREE_EDGE 2 12206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_GRAPH_BACK_EDGE 4 12216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_GRAPH_FORWARD_EDGE 8 12226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_GRAPH_CROSS_EDGE 16 12236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_GRAPH_ANY_EDGE 30 12246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_GRAPH_NEW_TREE 32 12256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_GRAPH_BACKTRACKING 64 12266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_GRAPH_OVER -1 12276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_GRAPH_ALL_ITEMS -1 12296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* flags for graph vertices and edges */ 12316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_GRAPH_ITEM_VISITED_FLAG (1 << 30) 12326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IS_GRAPH_VERTEX_VISITED(vtx) \ 12336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (((CvGraphVtx*)(vtx))->flags & CV_GRAPH_ITEM_VISITED_FLAG) 12346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IS_GRAPH_EDGE_VISITED(edge) \ 12356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (((CvGraphEdge*)(edge))->flags & CV_GRAPH_ITEM_VISITED_FLAG) 12366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_GRAPH_SEARCH_TREE_NODE_FLAG (1 << 29) 12376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_GRAPH_FORWARD_EDGE_FLAG (1 << 28) 12386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvGraphScanner 12406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 12416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvGraphVtx* vtx; /* current graph vertex (or current edge origin) */ 12426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvGraphVtx* dst; /* current graph edge destination vertex */ 12436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvGraphEdge* edge; /* current edge */ 12446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvGraph* graph; /* the graph */ 12466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSeq* stack; /* the graph vertex stack */ 12476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int index; /* the lower bound of certainly visited vertices */ 12486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int mask; /* event mask */ 12496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 12506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvGraphScanner; 12516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Creates new graph scanner. */ 12536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvGraphScanner*) cvCreateGraphScanner( CvGraph* graph, 12546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvGraphVtx* vtx CV_DEFAULT(NULL), 12556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int mask CV_DEFAULT(CV_GRAPH_ALL_ITEMS)); 12566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Releases graph scanner. */ 12586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvReleaseGraphScanner( CvGraphScanner** scanner ); 12596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Get next graph element */ 12616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) cvNextGraphItem( CvGraphScanner* scanner ); 12626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Creates a copy of graph */ 12646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvGraph*) cvCloneGraph( const CvGraph* graph, CvMemStorage* storage ); 12656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/****************************************************************************************\ 12676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn* Drawing * 12686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn\****************************************************************************************/ 12696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/****************************************************************************************\ 12716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn* Drawing functions work with images/matrices of arbitrary type. * 12726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn* For color images the channel order is BGR[A] * 12736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn* Antialiasing is supported only for 8-bit image now. * 12746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn* All the functions include parameter color that means rgb value (that may be * 12756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn* constructed with CV_RGB macro) for color images and brightness * 12766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn* for grayscale images. * 12776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn* If a drawn figure is partially or completely outside of the image, it is clipped.* 12786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn\****************************************************************************************/ 12796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_RGB( r, g, b ) cvScalar( (b), (g), (r), 0 ) 12816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_FILLED -1 12826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_AA 16 12846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Draws 4-connected, 8-connected or antialiased line segment connecting two points */ 12866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvLine( CvArr* img, CvPoint pt1, CvPoint pt2, 12876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvScalar color, int thickness CV_DEFAULT(1), 12886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0) ); 12896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Draws a rectangle given two opposite corners of the rectangle (pt1 & pt2), 12916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if thickness<0 (e.g. thickness == CV_FILLED), the filled box is drawn */ 12926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvRectangle( CvArr* img, CvPoint pt1, CvPoint pt2, 12936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvScalar color, int thickness CV_DEFAULT(1), 12946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int line_type CV_DEFAULT(8), 12956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int shift CV_DEFAULT(0)); 12966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Draws a circle with specified center and radius. 12986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn Thickness works in the same way as with cvRectangle */ 12996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvCircle( CvArr* img, CvPoint center, int radius, 13006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvScalar color, int thickness CV_DEFAULT(1), 13016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0)); 13026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 13036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Draws ellipse outline, filled ellipse, elliptic arc or filled elliptic sector, 13046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn depending on <thickness>, <start_angle> and <end_angle> parameters. The resultant figure 13056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn is rotated by <angle>. All the angles are in degrees */ 13066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvEllipse( CvArr* img, CvPoint center, CvSize axes, 13076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double angle, double start_angle, double end_angle, 13086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvScalar color, int thickness CV_DEFAULT(1), 13096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0)); 13106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 13116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvEllipseBox( CvArr* img, CvBox2D box, CvScalar color, 13126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int thickness CV_DEFAULT(1), 13136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0) ) 13146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 13156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSize axes; 13166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn axes.width = cvRound(box.size.height*0.5); 13176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn axes.height = cvRound(box.size.width*0.5); 13186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 13196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvEllipse( img, cvPointFrom32f( box.center ), axes, box.angle, 13206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 0, 360, color, thickness, line_type, shift ); 13216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 13226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 13236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Fills convex or monotonous polygon. */ 13246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvFillConvexPoly( CvArr* img, CvPoint* pts, int npts, CvScalar color, 13256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0)); 13266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 13276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Fills an area bounded by one or more arbitrary polygons */ 13286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvFillPoly( CvArr* img, CvPoint** pts, int* npts, int contours, CvScalar color, 13296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0) ); 13306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 13316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Draws one or more polygonal curves */ 13326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvPolyLine( CvArr* img, CvPoint** pts, int* npts, int contours, 13336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int is_closed, CvScalar color, int thickness CV_DEFAULT(1), 13346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0) ); 13356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 13366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvDrawRect cvRectangle 13376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvDrawLine cvLine 13386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvDrawCircle cvCircle 13396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvDrawEllipse cvEllipse 13406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvDrawPolyLine cvPolyLine 13416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 13426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Clips the line segment connecting *pt1 and *pt2 13436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn by the rectangular window 13446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (0<=x<img_size.width, 0<=y<img_size.height). */ 13456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) cvClipLine( CvSize img_size, CvPoint* pt1, CvPoint* pt2 ); 13466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 13476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Initializes line iterator. Initially, line_iterator->ptr will point 13486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn to pt1 (or pt2, see left_to_right description) location in the image. 13496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn Returns the number of pixels on the line between the ending points. */ 13506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) cvInitLineIterator( const CvArr* image, CvPoint pt1, CvPoint pt2, 13516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvLineIterator* line_iterator, 13526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int connectivity CV_DEFAULT(8), 13536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int left_to_right CV_DEFAULT(0)); 13546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 13556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Moves iterator to the next line point */ 13566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_NEXT_LINE_POINT( line_iterator ) \ 13576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ \ 13586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int _line_iterator_mask = (line_iterator).err < 0 ? -1 : 0; \ 13596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (line_iterator).err += (line_iterator).minus_delta + \ 13606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ((line_iterator).plus_delta & _line_iterator_mask); \ 13616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (line_iterator).ptr += (line_iterator).minus_step + \ 13626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ((line_iterator).plus_step & _line_iterator_mask); \ 13636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 13646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 13656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 13666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* basic font types */ 13676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_FONT_HERSHEY_SIMPLEX 0 13686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_FONT_HERSHEY_PLAIN 1 13696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_FONT_HERSHEY_DUPLEX 2 13706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_FONT_HERSHEY_COMPLEX 3 13716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_FONT_HERSHEY_TRIPLEX 4 13726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_FONT_HERSHEY_COMPLEX_SMALL 5 13736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_FONT_HERSHEY_SCRIPT_SIMPLEX 6 13746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_FONT_HERSHEY_SCRIPT_COMPLEX 7 13756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 13766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* font flags */ 13776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_FONT_ITALIC 16 13786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 13796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_FONT_VECTOR0 CV_FONT_HERSHEY_SIMPLEX 13806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 13816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Font structure */ 13826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvFont 13836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 13846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int font_face; /* =CV_FONT_* */ 13856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const int* ascii; /* font data and metrics */ 13866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const int* greek; 13876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const int* cyrillic; 13886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn float hscale, vscale; 13896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn float shear; /* slope coefficient: 0 - normal, >0 - italic */ 13906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int thickness; /* letters thickness */ 13916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn float dx; /* horizontal interval between letters */ 13926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int line_type; 13936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 13946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvFont; 13956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 13966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Initializes font structure used further in cvPutText */ 13976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvInitFont( CvFont* font, int font_face, 13986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double hscale, double vscale, 13996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double shear CV_DEFAULT(0), 14006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int thickness CV_DEFAULT(1), 14016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int line_type CV_DEFAULT(8)); 14026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 14036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE CvFont cvFont( double scale, int thickness CV_DEFAULT(1) ) 14046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 14056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvFont font; 14066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvInitFont( &font, CV_FONT_HERSHEY_PLAIN, scale, scale, 0, thickness, CV_AA ); 14076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return font; 14086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 14096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 14106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Renders text stroke with specified font and color at specified location. 14116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvFont should be initialized with cvInitFont */ 14126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvPutText( CvArr* img, const char* text, CvPoint org, 14136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const CvFont* font, CvScalar color ); 14146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 14156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Calculates bounding box of text stroke (useful for alignment) */ 14166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvGetTextSize( const char* text_string, const CvFont* font, 14176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSize* text_size, int* baseline ); 14186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 14196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Unpacks color value, if arrtype is CV_8UC?, <color> is treated as 14206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn packed color value, otherwise the first channels (depending on arrtype) 14216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn of destination scalar are set to the same value = <color> */ 14226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvScalar) cvColorToScalar( double packed_color, int arrtype ); 14236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 14246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Returns the polygon points which make up the given ellipse. The ellipse is define by 14256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn the box of size 'axes' rotated 'angle' around the 'center'. A partial sweep 14266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn of the ellipse arc can be done by spcifying arc_start and arc_end to be something 14276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn other than 0 and 360, respectively. The input array 'pts' must be large enough to 14286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn hold the result. The total number of points stored into 'pts' is returned by this 14296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn function. */ 14306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) cvEllipse2Poly( CvPoint center, CvSize axes, 14316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int angle, int arc_start, int arc_end, CvPoint * pts, int delta ); 14326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 14336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Draws contour outlines or filled interiors on the image */ 14346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvDrawContours( CvArr *img, CvSeq* contour, 14356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvScalar external_color, CvScalar hole_color, 14366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int max_level, int thickness CV_DEFAULT(1), 14376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int line_type CV_DEFAULT(8), 14386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvPoint offset CV_DEFAULT(cvPoint(0,0))); 14396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 14406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Does look-up transformation. Elements of the source array 14416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (that should be 8uC1 or 8sC1) are used as indexes in lutarr 256-element table */ 14426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvLUT( const CvArr* src, CvArr* dst, const CvArr* lut ); 14436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 14446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 14456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/******************* Iteration through the sequence tree *****************/ 14466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvTreeNodeIterator 14476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 14486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const void* node; 14496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int level; 14506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int max_level; 14516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 14526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvTreeNodeIterator; 14536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 14546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvInitTreeNodeIterator( CvTreeNodeIterator* tree_iterator, 14556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const void* first, int max_level ); 14566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void*) cvNextTreeNode( CvTreeNodeIterator* tree_iterator ); 14576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void*) cvPrevTreeNode( CvTreeNodeIterator* tree_iterator ); 14586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 14596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Inserts sequence into tree with specified "parent" sequence. 14606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn If parent is equal to frame (e.g. the most external contour), 14616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn then added contour will have null pointer to parent. */ 14626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvInsertNodeIntoTree( void* node, void* parent, void* frame ); 14636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 14646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Removes contour from tree (together with the contour children). */ 14656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvRemoveNodeFromTree( void* node, void* frame ); 14666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 14676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Gathers pointers to all the sequences, 14686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn accessible from the <first>, to the single sequence */ 14696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvSeq*) cvTreeToNodeSeq( const void* first, int header_size, 14706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMemStorage* storage ); 14716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 14726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* The function implements the K-means algorithm for clustering an array of sample 14736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn vectors in a specified number of classes */ 14746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvKMeans2( const CvArr* samples, int cluster_count, 14756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvArr* labels, CvTermCriteria termcrit ); 14766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 14776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/****************************************************************************************\ 14786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn* System functions * 14796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn\****************************************************************************************/ 14806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 14816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Add the function pointers table with associated information to the IPP primitives list */ 14826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) cvRegisterModule( const CvModuleInfo* module_info ); 14836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 14846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Loads optimized functions from IPP, MKL etc. or switches back to pure C code */ 14856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) cvUseOptimized( int on_off ); 14866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 14876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Retrieves information about the registered modules and loaded optimized plugins */ 14886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvGetModuleInfo( const char* module_name, 14896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const char** version, 14906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const char** loaded_addon_plugins ); 14916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 14926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Get current OpenCV error status */ 14936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) cvGetErrStatus( void ); 14946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 14956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Sets error status silently */ 14966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvSetErrStatus( int status ); 14976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 14986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_ErrModeLeaf 0 /* Print error and exit program */ 14996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_ErrModeParent 1 /* Print error and continue */ 15006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_ErrModeSilent 2 /* Don't print and continue */ 15016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 15026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Retrives current error processing mode */ 15036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) cvGetErrMode( void ); 15046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 15056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Sets error processing mode, returns previously used mode */ 15066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) cvSetErrMode( int mode ); 15076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 15086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Sets error status and performs some additonal actions (displaying message box, 15096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn writing message to stderr, terminating application etc.) 15106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn depending on the current error mode */ 15116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvError( int status, const char* func_name, 15126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const char* err_msg, const char* file_name, int line ); 15136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 15146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Retrieves textual description of the error given its code */ 15156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(const char*) cvErrorStr( int status ); 15166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 15176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Retrieves detailed information about the last error occured */ 15186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) cvGetErrInfo( const char** errcode_desc, const char** description, 15196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const char** filename, int* line ); 15206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 15216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Maps IPP error codes to the counterparts from OpenCV */ 15226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) cvErrorFromIppStatus( int ipp_status ); 15236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 15246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef int (CV_CDECL *CvErrorCallback)( int status, const char* func_name, 15256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const char* err_msg, const char* file_name, int line, void* userdata ); 15266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 15276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Assigns a new error-handling function */ 15286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvErrorCallback) cvRedirectError( CvErrorCallback error_handler, 15296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void* userdata CV_DEFAULT(NULL), 15306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void** prev_userdata CV_DEFAULT(NULL) ); 15316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 15326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* 15336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn Output to: 15346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvNulDevReport - nothing 15356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvStdErrReport - console(fprintf(stderr,...)) 15366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvGuiBoxReport - MessageBox(WIN32) 15376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn*/ 15386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) cvNulDevReport( int status, const char* func_name, const char* err_msg, 15396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const char* file_name, int line, void* userdata ); 15406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 15416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) cvStdErrReport( int status, const char* func_name, const char* err_msg, 15426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const char* file_name, int line, void* userdata ); 15436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 15446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) cvGuiBoxReport( int status, const char* func_name, const char* err_msg, 15456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const char* file_name, int line, void* userdata ); 15466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 15476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef void* (CV_CDECL *CvAllocFunc)(size_t size, void* userdata); 15486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef int (CV_CDECL *CvFreeFunc)(void* pptr, void* userdata); 15496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 15506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Set user-defined memory managment functions (substitutors for malloc and free) that 15516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn will be called by cvAlloc, cvFree and higher-level functions (e.g. cvCreateImage) */ 15526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvSetMemoryManager( CvAllocFunc alloc_func CV_DEFAULT(NULL), 15536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvFreeFunc free_func CV_DEFAULT(NULL), 15546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void* userdata CV_DEFAULT(NULL)); 15556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 15566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 15576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef IplImage* (CV_STDCALL* Cv_iplCreateImageHeader) 15586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (int,int,int,char*,char*,int,int,int,int,int, 15596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn IplROI*,IplImage*,void*,IplTileInfo*); 15606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef void (CV_STDCALL* Cv_iplAllocateImageData)(IplImage*,int,int); 15616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef void (CV_STDCALL* Cv_iplDeallocate)(IplImage*,int); 15626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef IplROI* (CV_STDCALL* Cv_iplCreateROI)(int,int,int,int,int); 15636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef IplImage* (CV_STDCALL* Cv_iplCloneImage)(const IplImage*); 15646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 15656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Makes OpenCV use IPL functions for IplImage allocation/deallocation */ 15666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvSetIPLAllocators( Cv_iplCreateImageHeader create_header, 15676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn Cv_iplAllocateImageData allocate_data, 15686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn Cv_iplDeallocate deallocate, 15696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn Cv_iplCreateROI create_roi, 15706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn Cv_iplCloneImage clone_image ); 15716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 15726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_TURN_ON_IPL_COMPATIBILITY() \ 15736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvSetIPLAllocators( iplCreateImageHeader, iplAllocateImage, \ 15746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn iplDeallocate, iplCreateROI, iplCloneImage ) 15756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 15766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/****************************************************************************************\ 15776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn* Data Persistence * 15786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn\****************************************************************************************/ 15796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 15806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/********************************** High-level functions ********************************/ 15816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 15826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* opens existing or creates new file storage */ 15836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvFileStorage*) cvOpenFileStorage( const char* filename, 15846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMemStorage* memstorage, 15856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int flags ); 15866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 15876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* closes file storage and deallocates buffers */ 15886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvReleaseFileStorage( CvFileStorage** fs ); 15896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 15906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* returns attribute value or 0 (NULL) if there is no such attribute */ 15916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(const char*) cvAttrValue( const CvAttrList* attr, const char* attr_name ); 15926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 15936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* starts writing compound structure (map or sequence) */ 15946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvStartWriteStruct( CvFileStorage* fs, const char* name, 15956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int struct_flags, const char* type_name CV_DEFAULT(NULL), 15966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvAttrList attributes CV_DEFAULT(cvAttrList())); 15976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 15986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* finishes writing compound structure */ 15996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvEndWriteStruct( CvFileStorage* fs ); 16006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 16016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* writes an integer */ 16026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvWriteInt( CvFileStorage* fs, const char* name, int value ); 16036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 16046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* writes a floating-point number */ 16056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvWriteReal( CvFileStorage* fs, const char* name, double value ); 16066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 16076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* writes a string */ 16086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvWriteString( CvFileStorage* fs, const char* name, 16096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const char* str, int quote CV_DEFAULT(0) ); 16106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 16116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* writes a comment */ 16126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvWriteComment( CvFileStorage* fs, const char* comment, 16136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int eol_comment ); 16146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 16156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* writes instance of a standard type (matrix, image, sequence, graph etc.) 16166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn or user-defined type */ 16176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvWrite( CvFileStorage* fs, const char* name, const void* ptr, 16186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvAttrList attributes CV_DEFAULT(cvAttrList())); 16196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 16206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* starts the next stream */ 16216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvStartNextStream( CvFileStorage* fs ); 16226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 16236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* helper function: writes multiple integer or floating-point numbers */ 16246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvWriteRawData( CvFileStorage* fs, const void* src, 16256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int len, const char* dt ); 16266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 16276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* returns the hash entry corresponding to the specified literal key string or 0 16286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if there is no such a key in the storage */ 16296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvStringHashNode*) cvGetHashedKey( CvFileStorage* fs, const char* name, 16306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int len CV_DEFAULT(-1), 16316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int create_missing CV_DEFAULT(0)); 16326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 16336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* returns file node with the specified key within the specified map 16346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (collection of named nodes) */ 16356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvFileNode*) cvGetRootFileNode( const CvFileStorage* fs, 16366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int stream_index CV_DEFAULT(0) ); 16376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 16386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* returns file node with the specified key within the specified map 16396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (collection of named nodes) */ 16406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvFileNode*) cvGetFileNode( CvFileStorage* fs, CvFileNode* map, 16416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const CvStringHashNode* key, 16426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int create_missing CV_DEFAULT(0) ); 16436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 16446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* this is a slower version of cvGetFileNode that takes the key as a literal string */ 16456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvFileNode*) cvGetFileNodeByName( const CvFileStorage* fs, 16466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const CvFileNode* map, 16476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const char* name ); 16486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 16496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE int cvReadInt( const CvFileNode* node, int default_value CV_DEFAULT(0) ) 16506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 16516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return !node ? default_value : 16526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_NODE_IS_INT(node->tag) ? node->data.i : 16536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_NODE_IS_REAL(node->tag) ? cvRound(node->data.f) : 0x7fffffff; 16546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 16556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 16566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 16576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE int cvReadIntByName( const CvFileStorage* fs, const CvFileNode* map, 16586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const char* name, int default_value CV_DEFAULT(0) ) 16596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 16606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return cvReadInt( cvGetFileNodeByName( fs, map, name ), default_value ); 16616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 16626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 16636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 16646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE double cvReadReal( const CvFileNode* node, double default_value CV_DEFAULT(0.) ) 16656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 16666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return !node ? default_value : 16676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_NODE_IS_INT(node->tag) ? (double)node->data.i : 16686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_NODE_IS_REAL(node->tag) ? node->data.f : 1e300; 16696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 16706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 16716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 16726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE double cvReadRealByName( const CvFileStorage* fs, const CvFileNode* map, 16736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const char* name, double default_value CV_DEFAULT(0.) ) 16746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 16756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return cvReadReal( cvGetFileNodeByName( fs, map, name ), default_value ); 16766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 16776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 16786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 16796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE const char* cvReadString( const CvFileNode* node, 16806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const char* default_value CV_DEFAULT(NULL) ) 16816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 16826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return !node ? default_value : CV_NODE_IS_STRING(node->tag) ? node->data.str.ptr : 0; 16836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 16846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 16856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 16866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE const char* cvReadStringByName( const CvFileStorage* fs, const CvFileNode* map, 16876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const char* name, const char* default_value CV_DEFAULT(NULL) ) 16886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 16896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return cvReadString( cvGetFileNodeByName( fs, map, name ), default_value ); 16906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 16916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 16926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 16936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* decodes standard or user-defined object and returns it */ 16946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void*) cvRead( CvFileStorage* fs, CvFileNode* node, 16956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvAttrList* attributes CV_DEFAULT(NULL)); 16966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 16976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* decodes standard or user-defined object and returns it */ 16986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void* cvReadByName( CvFileStorage* fs, const CvFileNode* map, 16996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const char* name, CvAttrList* attributes CV_DEFAULT(NULL) ) 17006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 17016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return cvRead( fs, cvGetFileNodeByName( fs, map, name ), attributes ); 17026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 17036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 17046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 17056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* starts reading data from sequence or scalar numeric node */ 17066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvStartReadRawData( const CvFileStorage* fs, const CvFileNode* src, 17076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSeqReader* reader ); 17086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 17096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* reads multiple numbers and stores them to array */ 17106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvReadRawDataSlice( const CvFileStorage* fs, CvSeqReader* reader, 17116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int count, void* dst, const char* dt ); 17126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 17136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* combination of two previous functions for easier reading of whole sequences */ 17146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvReadRawData( const CvFileStorage* fs, const CvFileNode* src, 17156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void* dst, const char* dt ); 17166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 17176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* writes a copy of file node to file storage */ 17186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvWriteFileNode( CvFileStorage* fs, const char* new_node_name, 17196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const CvFileNode* node, int embed ); 17206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 17216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* returns name of file node */ 17226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(const char*) cvGetFileNodeName( const CvFileNode* node ); 17236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 17246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*********************************** Adding own types ***********************************/ 17256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 17266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvRegisterType( const CvTypeInfo* info ); 17276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvUnregisterType( const char* type_name ); 17286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvTypeInfo*) cvFirstType(void); 17296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvTypeInfo*) cvFindType( const char* type_name ); 17306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(CvTypeInfo*) cvTypeOf( const void* struct_ptr ); 17316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 17326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* universal functions */ 17336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvRelease( void** struct_ptr ); 17346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void*) cvClone( const void* struct_ptr ); 17356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 17366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* simple API for reading/writing data */ 17376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvSave( const char* filename, const void* struct_ptr, 17386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const char* name CV_DEFAULT(NULL), 17396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const char* comment CV_DEFAULT(NULL), 17406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvAttrList attributes CV_DEFAULT(cvAttrList())); 17416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void*) cvLoad( const char* filename, 17426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMemStorage* memstorage CV_DEFAULT(NULL), 17436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const char* name CV_DEFAULT(NULL), 17446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const char** real_name CV_DEFAULT(NULL) ); 17456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 17466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*********************************** Measuring Execution Time ***************************/ 17476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 17486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* helper functions for RNG initialization and accurate time measurement: 17496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn uses internal clock counter on x86 */ 17506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int64) cvGetTickCount( void ); 17516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(double) cvGetTickFrequency( void ); 17526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 17536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*********************************** Multi-Threading ************************************/ 17546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 17556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* retrieve/set the number of threads used in OpenMP implementations */ 17566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) cvGetNumThreads( void ); 17576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(void) cvSetNumThreads( int threads CV_DEFAULT(0) ); 17586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* get index of the thread being executed */ 17596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) cvGetThreadNum( void ); 17606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 17616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*************** Convenience functions for better interaction with HighGUI **************/ 17626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 17636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef IplImage* (CV_CDECL * CvLoadImageFunc)( const char* filename, int colorness ); 17646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef CvMat* (CV_CDECL * CvLoadImageMFunc)( const char* filename, int colorness ); 17656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef int (CV_CDECL * CvSaveImageFunc)( const char* filename, const CvArr* image ); 17666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef void (CV_CDECL * CvShowImageFunc)( const char* windowname, const CvArr* image ); 17676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 17686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCVAPI(int) cvSetImageIOFunctions( CvLoadImageFunc _load_image, CvLoadImageMFunc _load_image_m, 17696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSaveImageFunc _save_image, CvShowImageFunc _show_image ); 17706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 17716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SET_IMAGE_IO_FUNCTIONS() \ 17726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvSetImageIOFunctions( cvLoadImage, cvLoadImageM, cvSaveImage, cvShowImage ) 17736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 17746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#ifdef __cplusplus 17756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 17766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 17776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#include "cxcore.hpp" 17786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 17796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 17806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif /*_CXCORE_H_*/ 1781