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 A few macros and definitions for backward compatibility 446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn with the previous versions of OpenCV. They are obsolete and 456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn are likely to be removed in future. To check whether your code 466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn uses any of these, define CV_NO_BACKWARD_COMPATIBILITY before 476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn including cv.h. 486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn*/ 496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#ifndef _CVCOMPAT_H_ 516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define _CVCOMPAT_H_ 526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#include <string.h> 546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#ifdef __cplusplus 566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #define CV_UNREFERENCED(arg) 576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#else 586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #define CV_UNREFERENCED(arg) arg 596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CvMatType int 626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CvDisMaskType int 636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CvMatArray CvMat 646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CvThreshType int 666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CvAdaptiveThreshMethod int 676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CvCompareMethod int 686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CvFontFace int 696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CvPolyApproxMethod int 706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CvContoursMatchMethod int 716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CvContourTreesMatchMethod int 726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CvCoeffType int 736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CvRodriguesType int 746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CvElementShape int 756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CvMorphOp int 766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CvTemplMatchMethod int 776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CvPoint2D64d CvPoint2D64f 796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CvPoint3D64d CvPoint3D64f 806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MAT32F CV_32FC1 826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MAT3x1_32F CV_32FC1 836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MAT4x1_32F CV_32FC1 846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MAT3x3_32F CV_32FC1 856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MAT4x4_32F CV_32FC1 866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MAT64D CV_64FC1 886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MAT3x1_64D CV_64FC1 896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MAT4x1_64D CV_64FC1 906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MAT3x3_64D CV_64FC1 916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MAT4x4_64D CV_64FC1 926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define IPL_GAUSSIAN_5x5 7 946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CvBox2D32f CvBox2D 956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* allocation/deallocation macros */ 976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvCreateImageData cvCreateData 986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvReleaseImageData cvReleaseData 996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvSetImageData cvSetData 1006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvGetImageRawData cvGetRawData 1016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvmAlloc cvCreateData 1036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvmFree cvReleaseData 1046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvmAllocArray cvCreateData 1056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvmFreeArray cvReleaseData 1066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvIntegralImage cvIntegral 1086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvMatchContours cvMatchShapes 1096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE CvMat cvMatArray( int rows, int cols, int type, 1116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int count, void* data CV_DEFAULT(0)) 1126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 1136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return cvMat( rows*count, cols, type, data ); 1146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 1156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvUpdateMHIByTime cvUpdateMotionHistory 1176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvAccMask cvAcc 1196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvSquareAccMask cvSquareAcc 1206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvMultiplyAccMask cvMultiplyAcc 1216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvRunningAvgMask(imgY, imgU, mask, alpha) cvRunningAvg(imgY, imgU, alpha, mask) 1226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvSetHistThresh cvSetHistBinRanges 1246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvCalcHistMask(img, mask, hist, doNotClear) cvCalcHist(img, hist, doNotClear, mask) 1256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE double cvMean( const CvArr* image, const CvArr* mask CV_DEFAULT(0)) 1276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 1286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvScalar mean = cvAvg( image, mask ); 1296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return mean.val[0]; 1306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 1316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE double cvSumPixels( const CvArr* image ) 1346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 1356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvScalar scalar = cvSum( image ); 1366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return scalar.val[0]; 1376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 1386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvMean_StdDev( const CvArr* image, double* mean, double* sdv, 1406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const CvArr* mask CV_DEFAULT(0)) 1416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 1426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvScalar _mean, _sdv; 1436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvAvgSdv( image, &_mean, &_sdv, mask ); 1446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( mean ) 1466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *mean = _mean.val[0]; 1476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( sdv ) 1496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *sdv = _sdv.val[0]; 1506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 1516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvmPerspectiveProject( const CvMat* mat, const CvArr* src, CvArr* dst ) 1546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 1556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat tsrc, tdst; 1566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvReshape( src, &tsrc, 3, 0 ); 1586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvReshape( dst, &tdst, 3, 0 ); 1596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvPerspectiveTransform( &tsrc, &tdst, mat ); 1616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 1626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvFillImage( CvArr* mat, double color ) 1656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 1666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvSet( mat, cvColorToScalar(color, cvGetElemType(mat)), 0 ); 1676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 1686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvCvtPixToPlane cvSplit 1716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvCvtPlaneToPix cvMerge 1726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvRandState 1746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 1756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvRNG state; /* RNG state (the current seed and carry)*/ 1766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int disttype; /* distribution type */ 1776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvScalar param[2]; /* parameters of RNG */ 1786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 1796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvRandState; 1806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Changes RNG range while preserving RNG state */ 1836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvRandSetRange( CvRandState* state, double param1, 1846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double param2, int index CV_DEFAULT(-1)) 1856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 1866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( !state ) 1876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 1886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvError( CV_StsNullPtr, "cvRandSetRange", "Null pointer to RNG state", "cvcompat.h", 0 ); 1896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return; 1906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 1916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( (unsigned)(index + 1) > 4 ) 1936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 1946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvError( CV_StsOutOfRange, "cvRandSetRange", "index is not in -1..3", "cvcompat.h", 0 ); 1956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return; 1966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 1976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( index < 0 ) 1996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 2006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn state->param[0].val[0] = state->param[0].val[1] = 2016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn state->param[0].val[2] = state->param[0].val[3] = param1; 2026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn state->param[1].val[0] = state->param[1].val[1] = 2036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn state->param[1].val[2] = state->param[1].val[3] = param2; 2046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 2056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn else 2066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 2076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn state->param[0].val[index] = param1; 2086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn state->param[1].val[index] = param2; 2096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 2106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvRandInit( CvRandState* state, double param1, 2146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double param2, int seed, 2156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int disttype CV_DEFAULT(CV_RAND_UNI)) 2166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( !state ) 2186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 2196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvError( CV_StsNullPtr, "cvRandInit", "Null pointer to RNG state", "cvcompat.h", 0 ); 2206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return; 2216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 2226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( disttype != CV_RAND_UNI && disttype != CV_RAND_NORMAL ) 2246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 2256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvError( CV_StsBadFlag, "cvRandInit", "Unknown distribution type", "cvcompat.h", 0 ); 2266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return; 2276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 2286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn state->state = (uint64)(seed ? seed : -1); 2306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn state->disttype = disttype; 2316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvRandSetRange( state, param1, param2, -1 ); 2326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Fills array with random numbers */ 2366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvRand( CvRandState* state, CvArr* arr ) 2376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( !state ) 2396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 2406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvError( CV_StsNullPtr, "cvRand", "Null pointer to RNG state", "cvcompat.h", 0 ); 2416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return; 2426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 2436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvRandArr( &state->state, arr, state->disttype, state->param[0], state->param[1] ); 2446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvRandNext( _state ) cvRandInt( &(_state)->state ) 2476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvbRand( CvRandState* state, float* dst, int len ) 2496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat mat = cvMat( 1, len, CV_32F, (void*)dst ); 2516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvRand( state, &mat ); 2526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvbCartToPolar( const float* y, const float* x, 2566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn float* magnitude, float* angle, int len ) 2576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat mx = cvMat( 1, len, CV_32F, (void*)x ); 2596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat my = mx; 2606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat mm = mx; 2616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat ma = mx; 2626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn my.data.fl = (float*)y; 2646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn mm.data.fl = (float*)magnitude; 2656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ma.data.fl = (float*)angle; 2666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvCartToPolar( &mx, &my, &mm, angle ? &ma : NULL, 1 ); 2686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvbFastArctan( const float* y, const float* x, 2726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn float* angle, int len ) 2736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat mx = cvMat( 1, len, CV_32F, (void*)x ); 2756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat my = mx; 2766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat ma = mx; 2776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn my.data.fl = (float*)y; 2796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ma.data.fl = (float*)angle; 2806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvCartToPolar( &mx, &my, NULL, &ma, 1 ); 2826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvbSqrt( const float* x, float* y, int len ) 2866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat mx = cvMat( 1, len, CV_32F, (void*)x ); 2886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat my = mx; 2896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn my.data.fl = (float*)y; 2906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvPow( &mx, &my, 0.5 ); 2926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvbInvSqrt( const float* x, float* y, int len ) 2966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat mx = cvMat( 1, len, CV_32F, (void*)x ); 2986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat my = mx; 2996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn my.data.fl = (float*)y; 3006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvPow( &mx, &my, -0.5 ); 3026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 3036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvbReciprocal( const float* x, float* y, int len ) 3066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 3076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat mx = cvMat( 1, len, CV_32F, (void*)x ); 3086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat my = mx; 3096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn my.data.fl = (float*)y; 3106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvPow( &mx, &my, -1 ); 3126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 3136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvbFastExp( const float* x, double* y, int len ) 3166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 3176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat mx = cvMat( 1, len, CV_32F, (void*)x ); 3186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat my = cvMat( 1, len, CV_64F, y ); 3196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvExp( &mx, &my ); 3206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 3216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvbFastLog( const double* x, float* y, int len ) 3246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 3256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat mx = cvMat( 1, len, CV_64F, (void*)x ); 3266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat my = cvMat( 1, len, CV_32F, y ); 3276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvLog( &mx, &my ); 3286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 3296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE CvRect cvContourBoundingRect( void* point_set, int update CV_DEFAULT(0)) 3326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 3336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return cvBoundingRect( point_set, update ); 3346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 3356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE double cvPseudoInverse( const CvArr* src, CvArr* dst ) 3386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 3396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return cvInvert( src, dst, CV_SVD ); 3406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 3416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvPseudoInv cvPseudoInverse 3436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvContourMoments( contour, moments ) \ 3456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvMoments( contour, moments, 0 ) 3466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvGetPtrAt cvPtr2D 3486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvGetAt cvGet2D 3496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvSetAt(arr,val,y,x) cvSet2D((arr),(y),(x),(val)) 3506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvMeanMask cvMean 3526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvMean_StdDevMask(img,mask,mean,sdv) cvMean_StdDev(img,mean,sdv,mask) 3536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvNormMask(imgA,imgB,mask,normType) cvNorm(imgA,imgB,normType,mask) 3556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvMinMaxLocMask(img, mask, min_val, max_val, min_loc, max_loc) \ 3576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvMinMaxLoc(img, min_val, max_val, min_loc, max_loc, mask) 3586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvRemoveMemoryManager cvSetMemoryManager 3606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvmSetZero( mat ) cvSetZero( mat ) 3626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvmSetIdentity( mat ) cvSetIdentity( mat ) 3636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvmAdd( src1, src2, dst ) cvAdd( src1, src2, dst, 0 ) 3646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvmSub( src1, src2, dst ) cvSub( src1, src2, dst, 0 ) 3656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvmCopy( src, dst ) cvCopy( src, dst, 0 ) 3666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvmMul( src1, src2, dst ) cvMatMulAdd( src1, src2, 0, dst ) 3676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvmTranspose( src, dst ) cvT( src, dst ) 3686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvmInvert( src, dst ) cvInv( src, dst ) 3696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvmMahalanobis(vec1, vec2, mat) cvMahalanobis( vec1, vec2, mat ) 3706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvmDotProduct( vec1, vec2 ) cvDotProduct( vec1, vec2 ) 3716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvmCrossProduct(vec1, vec2,dst) cvCrossProduct( vec1, vec2, dst ) 3726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvmTrace( mat ) (cvTrace( mat )).val[0] 3736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvmMulTransposed( src, dst, order ) cvMulTransposed( src, dst, order ) 3746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvmEigenVV( mat, evec, eval, eps) cvEigenVV( mat, evec, eval, eps ) 3756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvmDet( mat ) cvDet( mat ) 3766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvmScale( src, dst, scale ) cvScale( src, dst, scale ) 3776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvCopyImage( src, dst ) cvCopy( src, dst, 0 ) 3796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvReleaseMatHeader cvReleaseMat 3806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Calculates exact convex hull of 2d point set */ 3826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvConvexHull( CvPoint* points, int num_points, 3836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvRect* CV_UNREFERENCED(bound_rect), 3846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int orientation, int* hull, int* hullsize ) 3856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 3866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat points1 = cvMat( 1, num_points, CV_32SC2, points ); 3876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat hull1 = cvMat( 1, num_points, CV_32SC1, hull ); 3886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvConvexHull2( &points1, &hull1, orientation, 0 ); 3906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *hullsize = hull1.cols; 3916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 3926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Calculates exact convex hull of 2d point set stored in a sequence */ 3946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvContourConvexHull( contour, orientation, storage ) \ 3956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvConvexHull2( contour, storage, orientation ) 3966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Calculates approximate convex hull of 2d point set */ 3986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvConvexHullApprox( points, num_points, bound_rect, bandwidth, \ 3996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn orientation, hull, hullsize ) \ 4006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RenncvConvexHull( points, num_points, bound_rect, orientation, hull, hullsize ) 4016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Calculates approximate convex hull of 2d point set stored in a sequence */ 4036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvContourConvexHullApprox( contour, bandwidth, orientation, storage ) \ 4046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvConvexHull2( contour, storage, orientation ) 4056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvMinAreaRect( CvPoint* points, int n, 4086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int CV_UNREFERENCED(left), int CV_UNREFERENCED(bottom), 4096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int CV_UNREFERENCED(right), int CV_UNREFERENCED(top), 4106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvPoint2D32f* anchor, 4116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvPoint2D32f* vect1, 4126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvPoint2D32f* vect2 ) 4136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 4146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat mat = cvMat( 1, n, CV_32SC2, points ); 4156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvBox2D box = cvMinAreaRect2( &mat, 0 ); 4166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvPoint2D32f pt[4]; 4176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvBoxPoints( box, pt ); 4196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *anchor = pt[0]; 4206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn vect1->x = pt[1].x - pt[0].x; 4216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn vect1->y = pt[1].y - pt[0].y; 4226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn vect2->x = pt[3].x - pt[0].x; 4236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn vect2->y = pt[3].y - pt[0].y; 4246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_UNREFERENCED( (left, bottom, right, top) ); 4266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 4276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef int CvDisType; 4296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef int CvChainApproxMethod; 4306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef int CvContourRetrievalMode; 4316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvFitLine3D( CvPoint3D32f* points, int count, int dist, 4336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void *param, float reps, float aeps, float* line ) 4346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 4356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat mat = cvMat( 1, count, CV_32FC3, points ); 4366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn float _param = param != NULL ? *(float*)param : 0.f; 4376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn assert( dist != CV_DIST_USER ); 4386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvFitLine( &mat, dist, _param, reps, aeps, line ); 4396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 4406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Fits a line into set of 2d points in a robust way (M-estimator technique) */ 4426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvFitLine2D( CvPoint2D32f* points, int count, int dist, 4436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void *param, float reps, float aeps, float* line ) 4446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 4456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat mat = cvMat( 1, count, CV_32FC2, points ); 4466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn float _param = param != NULL ? *(float*)param : 0.f; 4476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn assert( dist != CV_DIST_USER ); 4486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvFitLine( &mat, dist, _param, reps, aeps, line ); 4496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 4506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvFitEllipse( const CvPoint2D32f* points, int count, CvBox2D* box ) 4536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 4546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat mat = cvMat( 1, count, CV_32FC2, (void*)points ); 4556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *box = cvFitEllipse2( &mat ); 4566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 4576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Projects 2d points to one of standard coordinate planes 4596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (i.e. removes one of coordinates) */ 4606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvProject3D( CvPoint3D32f* points3D, int count, 4616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvPoint2D32f* points2D, 4626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int xIndx CV_DEFAULT(0), 4636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int yIndx CV_DEFAULT(1)) 4646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 4656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat src = cvMat( 1, count, CV_32FC3, points3D ); 4666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat dst = cvMat( 1, count, CV_32FC2, points2D ); 4676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn float m[6] = {0,0,0,0,0,0}; 4686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat M = cvMat( 2, 3, CV_32F, m ); 4696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn assert( (unsigned)xIndx < 3 && (unsigned)yIndx < 3 ); 4716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn m[xIndx] = m[yIndx+3] = 1.f; 4726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvTransform( &src, &dst, &M, NULL ); 4746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 4756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Retrieves value of the particular bin 4786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn of x-dimensional (x=1,2,3,...) histogram */ 4796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvQueryHistValue_1D( hist, idx0 ) \ 4806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ((float)cvGetReal1D( (hist)->bins, (idx0))) 4816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvQueryHistValue_2D( hist, idx0, idx1 ) \ 4826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ((float)cvGetReal2D( (hist)->bins, (idx0), (idx1))) 4836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvQueryHistValue_3D( hist, idx0, idx1, idx2 ) \ 4846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ((float)cvGetReal3D( (hist)->bins, (idx0), (idx1), (idx2))) 4856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvQueryHistValue_nD( hist, idx ) \ 4866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ((float)cvGetRealND( (hist)->bins, (idx))) 4876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Returns pointer to the particular bin of x-dimesional histogram. 4896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn For sparse histogram the bin is created if it didn't exist before */ 4906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvGetHistValue_1D( hist, idx0 ) \ 4916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ((float*)cvPtr1D( (hist)->bins, (idx0), 0)) 4926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvGetHistValue_2D( hist, idx0, idx1 ) \ 4936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ((float*)cvPtr2D( (hist)->bins, (idx0), (idx1), 0)) 4946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvGetHistValue_3D( hist, idx0, idx1, idx2 ) \ 4956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ((float*)cvPtr3D( (hist)->bins, (idx0), (idx1), (idx2), 0)) 4966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvGetHistValue_nD( hist, idx ) \ 4976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ((float*)cvPtrND( (hist)->bins, (idx), 0)) 4986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IS_SET_ELEM_EXISTS CV_IS_SET_ELEM 5016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE int cvHoughLines( CvArr* image, double rho, 5046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double theta, int threshold, 5056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn float* lines, int linesNumber ) 5066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 5076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat linesMat = cvMat( 1, linesNumber, CV_32FC2, lines ); 5086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvHoughLines2( image, &linesMat, CV_HOUGH_STANDARD, 5096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn rho, theta, threshold, 0, 0 ); 5106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return linesMat.cols; 5126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 5136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE int cvHoughLinesP( CvArr* image, double rho, 5166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double theta, int threshold, 5176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int lineLength, int lineGap, 5186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int* lines, int linesNumber ) 5196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 5206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat linesMat = cvMat( 1, linesNumber, CV_32SC4, lines ); 5216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvHoughLines2( image, &linesMat, CV_HOUGH_PROBABILISTIC, 5226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn rho, theta, threshold, lineLength, lineGap ); 5236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return linesMat.cols; 5256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 5266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE int cvHoughLinesSDiv( CvArr* image, double rho, int srn, 5296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double theta, int stn, int threshold, 5306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn float* lines, int linesNumber ) 5316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 5326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat linesMat = cvMat( 1, linesNumber, CV_32FC2, lines ); 5336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvHoughLines2( image, &linesMat, CV_HOUGH_MULTI_SCALE, 5346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn rho, theta, threshold, srn, stn ); 5356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return linesMat.cols; 5376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 5386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Find fundamental matrix */ 5416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvFindFundamentalMatrix( int* points1, int* points2, 5426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int numpoints, int CV_UNREFERENCED(method), float* matrix ) 5436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 5446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat* pointsMat1; 5456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat* pointsMat2; 5466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat fundMatr = cvMat(3,3,CV_32F,matrix); 5476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int i, curr = 0; 5486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn pointsMat1 = cvCreateMat(3,numpoints,CV_64F); 5506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn pointsMat2 = cvCreateMat(3,numpoints,CV_64F); 5516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for( i = 0; i < numpoints; i++ ) 5536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 5546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvmSet(pointsMat1,0,i,points1[curr]);//x 5556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvmSet(pointsMat1,1,i,points1[curr+1]);//y 5566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvmSet(pointsMat1,2,i,1.0); 5576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvmSet(pointsMat2,0,i,points2[curr]);//x 5596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvmSet(pointsMat2,1,i,points2[curr+1]);//y 5606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvmSet(pointsMat2,2,i,1.0); 5616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn curr += 2; 5626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 5636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvFindFundamentalMat(pointsMat1,pointsMat2,&fundMatr,CV_FM_RANSAC,1,0.99,0); 5656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvReleaseMat(&pointsMat1); 5676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvReleaseMat(&pointsMat2); 5686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 5696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE int 5736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RenncvFindChessBoardCornerGuesses( const void* arr, void* CV_UNREFERENCED(thresharr), 5746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMemStorage * CV_UNREFERENCED(storage), 5756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSize pattern_size, CvPoint2D32f * corners, 5766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int *corner_count ) 5776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 5786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return cvFindChessboardCorners( arr, pattern_size, corners, 5796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn corner_count, CV_CALIB_CB_ADAPTIVE_THRESH ); 5806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 5816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Calibrates camera using multiple views of calibration pattern */ 5846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvCalibrateCamera( int image_count, int* _point_counts, 5856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSize image_size, CvPoint2D32f* _image_points, CvPoint3D32f* _object_points, 5866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn float* _distortion_coeffs, float* _camera_matrix, float* _translation_vectors, 5876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn float* _rotation_matrices, int flags ) 5886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 5896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int i, total = 0; 5906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat point_counts = cvMat( image_count, 1, CV_32SC1, _point_counts ); 5916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat image_points, object_points; 5926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat dist_coeffs = cvMat( 4, 1, CV_32FC1, _distortion_coeffs ); 5936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat camera_matrix = cvMat( 3, 3, CV_32FC1, _camera_matrix ); 5946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat rotation_matrices = cvMat( image_count, 9, CV_32FC1, _rotation_matrices ); 5956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat translation_vectors = cvMat( image_count, 3, CV_32FC1, _translation_vectors ); 5966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for( i = 0; i < image_count; i++ ) 5986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn total += _point_counts[i]; 5996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn image_points = cvMat( total, 1, CV_32FC2, _image_points ); 6016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn object_points = cvMat( total, 1, CV_32FC3, _object_points ); 6026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvCalibrateCamera2( &object_points, &image_points, &point_counts, image_size, 6046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn &camera_matrix, &dist_coeffs, &rotation_matrices, &translation_vectors, 6056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn flags ); 6066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 6076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvCalibrateCamera_64d( int image_count, int* _point_counts, 6106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSize image_size, CvPoint2D64f* _image_points, CvPoint3D64f* _object_points, 6116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double* _distortion_coeffs, double* _camera_matrix, double* _translation_vectors, 6126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double* _rotation_matrices, int flags ) 6136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 6146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int i, total = 0; 6156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat point_counts = cvMat( image_count, 1, CV_32SC1, _point_counts ); 6166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat image_points, object_points; 6176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat dist_coeffs = cvMat( 4, 1, CV_64FC1, _distortion_coeffs ); 6186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat camera_matrix = cvMat( 3, 3, CV_64FC1, _camera_matrix ); 6196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat rotation_matrices = cvMat( image_count, 9, CV_64FC1, _rotation_matrices ); 6206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat translation_vectors = cvMat( image_count, 3, CV_64FC1, _translation_vectors ); 6216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for( i = 0; i < image_count; i++ ) 6236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn total += _point_counts[i]; 6246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn image_points = cvMat( total, 1, CV_64FC2, _image_points ); 6266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn object_points = cvMat( total, 1, CV_64FC3, _object_points ); 6276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvCalibrateCamera2( &object_points, &image_points, &point_counts, image_size, 6296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn &camera_matrix, &dist_coeffs, &rotation_matrices, &translation_vectors, 6306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn flags ); 6316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 6326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Find 3d position of object given intrinsic camera parameters, 6366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3d model of the object and projection of the object into view plane */ 6376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvFindExtrinsicCameraParams( int point_count, 6386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSize CV_UNREFERENCED(image_size), CvPoint2D32f* _image_points, 6396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvPoint3D32f* _object_points, float* focal_length, 6406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvPoint2D32f principal_point, float* _distortion_coeffs, 6416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn float* _rotation_vector, float* _translation_vector ) 6426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 6436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat image_points = cvMat( point_count, 1, CV_32FC2, _image_points ); 6446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat object_points = cvMat( point_count, 1, CV_32FC3, _object_points ); 6456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat dist_coeffs = cvMat( 4, 1, CV_32FC1, _distortion_coeffs ); 6466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn float a[9]; 6476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat camera_matrix = cvMat( 3, 3, CV_32FC1, a ); 6486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat rotation_vector = cvMat( 1, 1, CV_32FC3, _rotation_vector ); 6496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat translation_vector = cvMat( 1, 1, CV_32FC3, _translation_vector ); 6506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn a[0] = focal_length[0]; a[4] = focal_length[1]; 6526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn a[2] = principal_point.x; a[5] = principal_point.y; 6536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn a[1] = a[3] = a[6] = a[7] = 0.f; 6546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn a[8] = 1.f; 6556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvFindExtrinsicCameraParams2( &object_points, &image_points, &camera_matrix, 6576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn &dist_coeffs, &rotation_vector, &translation_vector ); 6586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 6596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Variant of the previous function that takes double-precision parameters */ 6626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvFindExtrinsicCameraParams_64d( int point_count, 6636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSize CV_UNREFERENCED(image_size), CvPoint2D64f* _image_points, 6646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvPoint3D64f* _object_points, double* focal_length, 6656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvPoint2D64f principal_point, double* _distortion_coeffs, 6666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double* _rotation_vector, double* _translation_vector ) 6676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 6686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat image_points = cvMat( point_count, 1, CV_64FC2, _image_points ); 6696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat object_points = cvMat( point_count, 1, CV_64FC3, _object_points ); 6706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat dist_coeffs = cvMat( 4, 1, CV_64FC1, _distortion_coeffs ); 6716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double a[9]; 6726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat camera_matrix = cvMat( 3, 3, CV_64FC1, a ); 6736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat rotation_vector = cvMat( 1, 1, CV_64FC3, _rotation_vector ); 6746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat translation_vector = cvMat( 1, 1, CV_64FC3, _translation_vector ); 6756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn a[0] = focal_length[0]; a[4] = focal_length[1]; 6776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn a[2] = principal_point.x; a[5] = principal_point.y; 6786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn a[1] = a[3] = a[6] = a[7] = 0.; 6796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn a[8] = 1.; 6806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvFindExtrinsicCameraParams2( &object_points, &image_points, &camera_matrix, 6826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn &dist_coeffs, &rotation_vector, &translation_vector ); 6836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 6846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Rodrigues transform */ 6876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_RODRIGUES_M2V 0 6886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_RODRIGUES_V2M 1 6896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Converts rotation_matrix matrix to rotation_matrix vector or vice versa */ 6916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvRodrigues( CvMat* rotation_matrix, CvMat* rotation_vector, 6926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat* jacobian, int conv_type ) 6936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 6946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( conv_type == CV_RODRIGUES_V2M ) 6956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvRodrigues2( rotation_vector, rotation_matrix, jacobian ); 6966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn else 6976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvRodrigues2( rotation_matrix, rotation_vector, jacobian ); 6986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 6996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Does reprojection of 3d object points to the view plane */ 7026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvProjectPoints( int point_count, CvPoint3D64f* _object_points, 7036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double* _rotation_vector, double* _translation_vector, 7046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double* focal_length, CvPoint2D64f principal_point, 7056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double* _distortion, CvPoint2D64f* _image_points, 7066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double* _deriv_points_rotation_matrix, 7076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double* _deriv_points_translation_vect, 7086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double* _deriv_points_focal, 7096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double* _deriv_points_principal_point, 7106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double* _deriv_points_distortion_coeffs ) 7116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 7126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat object_points = cvMat( point_count, 1, CV_64FC3, _object_points ); 7136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat image_points = cvMat( point_count, 1, CV_64FC2, _image_points ); 7146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat rotation_vector = cvMat( 3, 1, CV_64FC1, _rotation_vector ); 7156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat translation_vector = cvMat( 3, 1, CV_64FC1, _translation_vector ); 7166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double a[9]; 7176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat camera_matrix = cvMat( 3, 3, CV_64FC1, a ); 7186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat dist_coeffs = cvMat( 4, 1, CV_64FC1, _distortion ); 7196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat dpdr = cvMat( 2*point_count, 3, CV_64FC1, _deriv_points_rotation_matrix ); 7206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat dpdt = cvMat( 2*point_count, 3, CV_64FC1, _deriv_points_translation_vect ); 7216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat dpdf = cvMat( 2*point_count, 2, CV_64FC1, _deriv_points_focal ); 7226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat dpdc = cvMat( 2*point_count, 2, CV_64FC1, _deriv_points_principal_point ); 7236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat dpdk = cvMat( 2*point_count, 4, CV_64FC1, _deriv_points_distortion_coeffs ); 7246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn a[0] = focal_length[0]; a[4] = focal_length[1]; 7266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn a[2] = principal_point.x; a[5] = principal_point.y; 7276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn a[1] = a[3] = a[6] = a[7] = 0.; 7286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn a[8] = 1.; 7296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvProjectPoints2( &object_points, &rotation_vector, &translation_vector, 7316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn &camera_matrix, &dist_coeffs, &image_points, 7326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn &dpdr, &dpdt, &dpdf, &dpdc, &dpdk, 0 ); 7336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 7346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Simpler version of the previous function */ 7376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvProjectPointsSimple( int point_count, CvPoint3D64f* _object_points, 7386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double* _rotation_matrix, double* _translation_vector, 7396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double* _camera_matrix, double* _distortion, CvPoint2D64f* _image_points ) 7406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 7416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat object_points = cvMat( point_count, 1, CV_64FC3, _object_points ); 7426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat image_points = cvMat( point_count, 1, CV_64FC2, _image_points ); 7436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat rotation_matrix = cvMat( 3, 3, CV_64FC1, _rotation_matrix ); 7446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat translation_vector = cvMat( 3, 1, CV_64FC1, _translation_vector ); 7456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat camera_matrix = cvMat( 3, 3, CV_64FC1, _camera_matrix ); 7466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat dist_coeffs = cvMat( 4, 1, CV_64FC1, _distortion ); 7476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvProjectPoints2( &object_points, &rotation_matrix, &translation_vector, 7496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn &camera_matrix, &dist_coeffs, &image_points, 7506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 0, 0, 0, 0, 0, 0 ); 7516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 7526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvUnDistortOnce( const CvArr* src, CvArr* dst, 7556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const float* intrinsic_matrix, 7566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const float* distortion_coeffs, 7576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int CV_UNREFERENCED(interpolate) ) 7586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 7596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat _a = cvMat( 3, 3, CV_32F, (void*)intrinsic_matrix ); 7606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat _k = cvMat( 4, 1, CV_32F, (void*)distortion_coeffs ); 7616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvUndistort2( src, dst, &_a, &_k ); 7626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 7636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* the two functions below have quite hackerish implementations, use with care 7666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (or, which is better, switch to cvUndistortInitMap and cvRemap instead */ 7676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvUnDistortInit( const CvArr* CV_UNREFERENCED(src), 7686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvArr* undistortion_map, 7696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const float* A, const float* k, 7706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int CV_UNREFERENCED(interpolate) ) 7716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 7726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn union { uchar* ptr; float* fl; } data; 7736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSize sz; 7746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvGetRawData( undistortion_map, &data.ptr, 0, &sz ); 7756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn assert( sz.width >= 8 ); 7766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* just save the intrinsic parameters to the map */ 7776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn data.fl[0] = A[0]; data.fl[1] = A[4]; 7786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn data.fl[2] = A[2]; data.fl[3] = A[5]; 7796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn data.fl[4] = k[0]; data.fl[5] = k[1]; 7806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn data.fl[6] = k[2]; data.fl[7] = k[3]; 7816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 7826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvUnDistort( const CvArr* src, CvArr* dst, 7846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const CvArr* undistortion_map, 7856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int CV_UNREFERENCED(interpolate) ) 7866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 7876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn union { uchar* ptr; float* fl; } data; 7886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn float a[] = {0,0,0,0,0,0,0,0,1}; 7896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSize sz; 7906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvGetRawData( undistortion_map, &data.ptr, 0, &sz ); 7916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn assert( sz.width >= 8 ); 7926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn a[0] = data.fl[0]; a[4] = data.fl[1]; 7936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn a[2] = data.fl[2]; a[5] = data.fl[3]; 7946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvUnDistortOnce( src, dst, a, data.fl + 4, 1 ); 7956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 7966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE float cvCalcEMD( const float* signature1, int size1, 7996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const float* signature2, int size2, 8006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int dims, int dist_type CV_DEFAULT(CV_DIST_L2), 8016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvDistanceFunction dist_func CV_DEFAULT(0), 8026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn float* lower_bound CV_DEFAULT(0), 8036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void* user_param CV_DEFAULT(0)) 8046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 8056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat sign1 = cvMat( size1, dims + 1, CV_32FC1, (void*)signature1 ); 8066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat sign2 = cvMat( size2, dims + 1, CV_32FC1, (void*)signature2 ); 8076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return cvCalcEMD2( &sign1, &sign2, dist_type, dist_func, 0, 0, lower_bound, user_param ); 8096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 8106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvKMeans( int num_clusters, float** samples, 8136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int num_samples, int vec_size, 8146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvTermCriteria termcrit, int* cluster_idx ) 8156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 8166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat* samples_mat = cvCreateMat( num_samples, vec_size, CV_32FC1 ); 8176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat cluster_idx_mat = cvMat( num_samples, 1, CV_32SC1, cluster_idx ); 8186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int i; 8196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for( i = 0; i < num_samples; i++ ) 8206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn memcpy( samples_mat->data.fl + i*vec_size, samples[i], vec_size*sizeof(float)); 8216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvKMeans2( samples_mat, num_clusters, &cluster_idx_mat, termcrit ); 8226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvReleaseMat( &samples_mat ); 8236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 8246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvStartScanGraph( CvGraph* graph, CvGraphScanner* scanner, 8276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvGraphVtx* vtx CV_DEFAULT(NULL), 8286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int mask CV_DEFAULT(CV_GRAPH_ALL_ITEMS)) 8296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 8306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvGraphScanner* temp_scanner; 8316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( !scanner ) 8336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvError( CV_StsNullPtr, "cvStartScanGraph", "Null scanner pointer", "cvcompat.h", 0 ); 8346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn temp_scanner = cvCreateGraphScanner( graph, vtx, mask ); 8366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *scanner = *temp_scanner; 8376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvFree( &temp_scanner ); 8386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 8396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvEndScanGraph( CvGraphScanner* scanner ) 8426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 8436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( !scanner ) 8446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvError( CV_StsNullPtr, "cvEndScanGraph", "Null scanner pointer", "cvcompat.h", 0 ); 8456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( scanner->stack ) 8476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 8486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvGraphScanner* temp_scanner = (CvGraphScanner*)cvAlloc( sizeof(*temp_scanner) ); 8496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *temp_scanner = *scanner; 8506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvReleaseGraphScanner( &temp_scanner ); 8516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn memset( scanner, 0, sizeof(*scanner) ); 8526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 8536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 8546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvKalmanUpdateByTime cvKalmanPredict 8576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvKalmanUpdateByMeasurement cvKalmanCorrect 8586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* old drawing functions */ 8606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvLineAA( CvArr* img, CvPoint pt1, CvPoint pt2, 8616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double color, int scale CV_DEFAULT(0)) 8626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 8636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvLine( img, pt1, pt2, cvColorToScalar(color, cvGetElemType(img)), 1, CV_AA, scale ); 8646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 8656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvCircleAA( CvArr* img, CvPoint center, int radius, 8676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double color, int scale CV_DEFAULT(0) ) 8686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 8696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvCircle( img, center, radius, cvColorToScalar(color, cvGetElemType(img)), 1, CV_AA, scale ); 8706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 8716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvEllipseAA( CvArr* img, CvPoint center, CvSize axes, 8736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double angle, double start_angle, 8746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double end_angle, double color, 8756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int scale CV_DEFAULT(0) ) 8766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 8776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvEllipse( img, center, axes, angle, start_angle, end_angle, 8786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvColorToScalar(color, cvGetElemType(img)), 1, CV_AA, scale ); 8796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 8806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvPolyLineAA( CvArr* img, CvPoint** pts, int* npts, int contours, 8826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int is_closed, double color, int scale CV_DEFAULT(0) ) 8836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 8846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvPolyLine( img, pts, npts, contours, is_closed, 8856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvColorToScalar(color, cvGetElemType(img)), 8866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1, CV_AA, scale ); 8876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 8886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvMake2DPoints cvConvertPointsHomogeneous 8916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvMake3DPoints cvConvertPointsHomogeneous 8926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvWarpPerspectiveQMatrix cvGetPerspectiveTransform 8946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvConvertPointsHomogenious cvConvertPointsHomogeneous 8966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/****************************************************************************************\ 8986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn* Pixel Access Macros * 8996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn\****************************************************************************************/ 9006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct _CvPixelPosition8u 9026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 9036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn uchar* currline; /* pointer to the start of the current pixel line */ 9046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn uchar* topline; /* pointer to the start of the top pixel line */ 9056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn uchar* bottomline; /* pointer to the start of the first line */ 9066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* which is below the image */ 9076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int x; /* current x coordinate ( in pixels ) */ 9086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int width; /* width of the image ( in pixels ) */ 9096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int height; /* height of the image ( in pixels ) */ 9106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int step; /* distance between lines ( in elements of single */ 9116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* plane ) */ 9126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int step_arr[3]; /* array: ( 0, -step, step ). It is used for */ 9136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* vertical moving */ 9146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} CvPixelPosition8u; 9156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* this structure differs from the above only in data type */ 9176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct _CvPixelPosition8s 9186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 9196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn schar* currline; 9206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn schar* topline; 9216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn schar* bottomline; 9226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int x; 9236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int width; 9246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int height; 9256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int step; 9266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int step_arr[3]; 9276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} CvPixelPosition8s; 9286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* this structure differs from the CvPixelPosition8u only in data type */ 9306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct _CvPixelPosition32f 9316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 9326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn float* currline; 9336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn float* topline; 9346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn float* bottomline; 9356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int x; 9366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int width; 9376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int height; 9386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int step; 9396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int step_arr[3]; 9406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} CvPixelPosition32f; 9416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Initialize one of the CvPixelPosition structures. */ 9446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* pos - initialized structure */ 9456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* origin - pointer to the left-top corner of the ROI */ 9466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* step - width of the whole image in bytes */ 9476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* roi - width & height of the ROI */ 9486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* x, y - initial position */ 9496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_INIT_PIXEL_POS(pos, origin, _step, roi, _x, _y, orientation) \ 9506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ( \ 9516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (pos).step = (_step)/sizeof((pos).currline[0]) * (orientation ? -1 : 1), \ 9526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (pos).width = (roi).width, \ 9536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (pos).height = (roi).height, \ 9546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (pos).bottomline = (origin) + (pos).step*(pos).height, \ 9556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (pos).topline = (origin) - (pos).step, \ 9566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (pos).step_arr[0] = 0, \ 9576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (pos).step_arr[1] = -(pos).step, \ 9586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (pos).step_arr[2] = (pos).step, \ 9596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (pos).x = (_x), \ 9606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (pos).currline = (origin) + (pos).step*(_y) ) 9616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Move to specified point ( absolute shift ) */ 9646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* pos - position structure */ 9656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* x, y - coordinates of the new position */ 9666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* cs - number of the image channels */ 9676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MOVE_TO( pos, _x, _y, cs ) \ 9686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn((pos).currline = (_y) >= 0 && (_y) < (pos).height ? (pos).topline + ((_y)+1)*(pos).step : 0, \ 9696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (pos).x = (_x) >= 0 && (_x) < (pos).width ? (_x) : 0, (pos).currline + (_x) * (cs) ) 9706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Get current coordinates */ 9726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* pos - position structure */ 9736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* x, y - coordinates of the new position */ 9746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* cs - number of the image channels */ 9756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_GET_CURRENT( pos, cs ) ((pos).currline + (pos).x * (cs)) 9766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Move by one pixel relatively to current position */ 9786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* pos - position structure */ 9796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* cs - number of the image channels */ 9806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* left */ 9826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MOVE_LEFT( pos, cs ) \ 9836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ( --(pos).x >= 0 ? (pos).currline + (pos).x*(cs) : 0 ) 9846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* right */ 9866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MOVE_RIGHT( pos, cs ) \ 9876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ( ++(pos).x < (pos).width ? (pos).currline + (pos).x*(cs) : 0 ) 9886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* up */ 9906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MOVE_UP( pos, cs ) \ 9916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (((pos).currline -= (pos).step) != (pos).topline ? (pos).currline + (pos).x*(cs) : 0 ) 9926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* down */ 9946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MOVE_DOWN( pos, cs ) \ 9956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (((pos).currline += (pos).step) != (pos).bottomline ? (pos).currline + (pos).x*(cs) : 0 ) 9966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* left up */ 9986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MOVE_LU( pos, cs ) ( CV_MOVE_LEFT(pos, cs), CV_MOVE_UP(pos, cs)) 9996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* right up */ 10016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MOVE_RU( pos, cs ) ( CV_MOVE_RIGHT(pos, cs), CV_MOVE_UP(pos, cs)) 10026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* left down */ 10046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MOVE_LD( pos, cs ) ( CV_MOVE_LEFT(pos, cs), CV_MOVE_DOWN(pos, cs)) 10056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* right down */ 10076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MOVE_RD( pos, cs ) ( CV_MOVE_RIGHT(pos, cs), CV_MOVE_DOWN(pos, cs)) 10086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Move by one pixel relatively to current position with wrapping when the position */ 10126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* achieves image boundary */ 10136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* pos - position structure */ 10146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* cs - number of the image channels */ 10156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* left */ 10176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MOVE_LEFT_WRAP( pos, cs ) \ 10186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ((pos).currline + ( --(pos).x >= 0 ? (pos).x : ((pos).x = (pos).width-1))*(cs)) 10196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* right */ 10216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MOVE_RIGHT_WRAP( pos, cs ) \ 10226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ((pos).currline + ( ++(pos).x < (pos).width ? (pos).x : ((pos).x = 0))*(cs) ) 10236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* up */ 10256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MOVE_UP_WRAP( pos, cs ) \ 10266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ((((pos).currline -= (pos).step) != (pos).topline ? \ 10276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (pos).currline : ((pos).currline = (pos).bottomline - (pos).step)) + (pos).x*(cs) ) 10286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* down */ 10306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MOVE_DOWN_WRAP( pos, cs ) \ 10316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ((((pos).currline += (pos).step) != (pos).bottomline ? \ 10326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (pos).currline : ((pos).currline = (pos).topline + (pos).step)) + (pos).x*(cs) ) 10336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* left up */ 10356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MOVE_LU_WRAP( pos, cs ) ( CV_MOVE_LEFT_WRAP(pos, cs), CV_MOVE_UP_WRAP(pos, cs)) 10366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* right up */ 10376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MOVE_RU_WRAP( pos, cs ) ( CV_MOVE_RIGHT_WRAP(pos, cs), CV_MOVE_UP_WRAP(pos, cs)) 10386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* left down */ 10396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MOVE_LD_WRAP( pos, cs ) ( CV_MOVE_LEFT_WRAP(pos, cs), CV_MOVE_DOWN_WRAP(pos, cs)) 10406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* right down */ 10416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MOVE_RD_WRAP( pos, cs ) ( CV_MOVE_RIGHT_WRAP(pos, cs), CV_MOVE_DOWN_WRAP(pos, cs)) 10426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Numeric constants which used for moving in arbitrary direction */ 10446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SHIFT_NONE 2 10456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SHIFT_LEFT 1 10466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SHIFT_RIGHT 3 10476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SHIFT_UP 6 10486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SHIFT_DOWN 10 10496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SHIFT_LU 5 10506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SHIFT_RU 7 10516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SHIFT_LD 9 10526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SHIFT_RD 11 10536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Move by one pixel in specified direction */ 10556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* pos - position structure */ 10566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* shift - direction ( it's value must be one of the CV_SHIFT_� constants ) */ 10576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* cs - number of the image channels */ 10586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MOVE_PARAM( pos, shift, cs ) \ 10596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ( (pos).currline += (pos).step_arr[(shift)>>2], (pos).x += ((shift)&3)-2, \ 10606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ((pos).currline != (pos).topline && (pos).currline != (pos).bottomline && \ 10616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (pos).x >= 0 && (pos).x < (pos).width) ? (pos).currline + (pos).x*(cs) : 0 ) 10626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Move by one pixel in specified direction with wrapping when the */ 10646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* position achieves image boundary */ 10656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* pos - position structure */ 10666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* shift - direction ( it's value must be one of the CV_SHIFT_� constants ) */ 10676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* cs - number of the image channels */ 10686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MOVE_PARAM_WRAP( pos, shift, cs ) \ 10696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ( (pos).currline += (pos).step_arr[(shift)>>2], \ 10706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (pos).currline = ((pos).currline == (pos).topline ? \ 10716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (pos).bottomline - (pos).step : \ 10726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (pos).currline == (pos).bottomline ? \ 10736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (pos).topline + (pos).step : (pos).currline), \ 10746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn \ 10756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (pos).x += ((shift)&3)-2, \ 10766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (pos).x = ((pos).x < 0 ? (pos).width-1 : (pos).x >= (pos).width ? 0 : (pos).x), \ 10776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn \ 10786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (pos).currline + (pos).x*(cs) ) 10796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif/*_CVCOMPAT_H_*/ 1081