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