"atomic bomb" commit. Reorganized OpenCV directory structure
This commit is contained in:
835
modules/imgproc/include/opencv2/imgproc/compat_c.h
Normal file
835
modules/imgproc/include/opencv2/imgproc/compat_c.h
Normal file
@@ -0,0 +1,835 @@
|
||||
/*M///////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
|
||||
//
|
||||
// By downloading, copying, installing or using the software you agree to this license.
|
||||
// If you do not agree to this license, do not download, install,
|
||||
// copy or use the software.
|
||||
//
|
||||
//
|
||||
// Intel License Agreement
|
||||
// For Open Source Computer Vision Library
|
||||
//
|
||||
// Copyright( C) 2000, Intel Corporation, all rights reserved.
|
||||
// Third party copyrights are property of their respective owners.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification,
|
||||
// are permitted provided that the following conditions are met:
|
||||
//
|
||||
// * Redistribution's of source code must retain the above copyright notice,
|
||||
// this list of conditions and the following disclaimer.
|
||||
//
|
||||
// * Redistribution's in binary form must reproduce the above copyright notice,
|
||||
// this list of conditions and the following disclaimer in the documentation
|
||||
// and/or other materials provided with the distribution.
|
||||
//
|
||||
// * The name of Intel Corporation may not be used to endorse or promote products
|
||||
// derived from this software without specific prior written permission.
|
||||
//
|
||||
// This software is provided by the copyright holders and contributors "as is" and
|
||||
// any express or implied warranties, including, but not limited to, the implied
|
||||
// warranties of merchantability and fitness for a particular purpose are disclaimed.
|
||||
// In no event shall the Intel Corporation or contributors be liable for any direct,
|
||||
// indirect, incidental, special, exemplary, or consequential damages
|
||||
//(including, but not limited to, procurement of substitute goods or services;
|
||||
// loss of use, data, or profits; or business interruption) however caused
|
||||
// and on any theory of liability, whether in contract, strict liability,
|
||||
// or tort(including negligence or otherwise) arising in any way out of
|
||||
// the use of this software, even if advised of the possibility of such damage.
|
||||
//
|
||||
//M*/
|
||||
|
||||
/*
|
||||
A few macros and definitions for backward compatibility
|
||||
with the previous versions of OpenCV. They are obsolete and
|
||||
are likely to be removed in future. To check whether your code
|
||||
uses any of these, define CV_NO_BACKWARD_COMPATIBILITY before
|
||||
including cv.h.
|
||||
*/
|
||||
|
||||
#ifndef __OPENCV_IMGPROC_COMPAT_C_H__
|
||||
#define __OPENCV_IMGPROC_COMPAT_C_H__
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
#define CV_UNREFERENCED(arg)
|
||||
#else
|
||||
#define CV_UNREFERENCED(arg) arg
|
||||
#endif
|
||||
|
||||
typedef int CvMatType;
|
||||
typedef int CvDisMaskType;
|
||||
typedef CvMat CvMatArray;
|
||||
|
||||
#define CvThreshType int
|
||||
#define CvAdaptiveThreshMethod int
|
||||
#define CvCompareMethod int
|
||||
#define CvFontFace int
|
||||
#define CvPolyApproxMethod int
|
||||
#define CvContoursMatchMethod int
|
||||
#define CvContourTreesMatchMethod int
|
||||
#define CvCoeffType int
|
||||
#define CvRodriguesType int
|
||||
#define CvElementShape int
|
||||
#define CvMorphOp int
|
||||
#define CvTemplMatchMethod int
|
||||
|
||||
#define CvPoint2D64d CvPoint2D64f
|
||||
#define CvPoint3D64d CvPoint3D64f
|
||||
|
||||
#define CV_MAT32F CV_32FC1
|
||||
#define CV_MAT3x1_32F CV_32FC1
|
||||
#define CV_MAT4x1_32F CV_32FC1
|
||||
#define CV_MAT3x3_32F CV_32FC1
|
||||
#define CV_MAT4x4_32F CV_32FC1
|
||||
|
||||
#define CV_MAT64D CV_64FC1
|
||||
#define CV_MAT3x1_64D CV_64FC1
|
||||
#define CV_MAT4x1_64D CV_64FC1
|
||||
#define CV_MAT3x3_64D CV_64FC1
|
||||
#define CV_MAT4x4_64D CV_64FC1
|
||||
|
||||
#define IPL_GAUSSIAN_5x5 7
|
||||
#define CvBox2D32f CvBox2D
|
||||
|
||||
/* allocation/deallocation macros */
|
||||
#define cvCreateImageData cvCreateData
|
||||
#define cvReleaseImageData cvReleaseData
|
||||
#define cvSetImageData cvSetData
|
||||
#define cvGetImageRawData cvGetRawData
|
||||
|
||||
#define cvmAlloc cvCreateData
|
||||
#define cvmFree cvReleaseData
|
||||
#define cvmAllocArray cvCreateData
|
||||
#define cvmFreeArray cvReleaseData
|
||||
|
||||
#define cvIntegralImage cvIntegral
|
||||
#define cvMatchContours cvMatchShapes
|
||||
|
||||
CV_INLINE CvMat cvMatArray( int rows, int cols, int type,
|
||||
int count, void* data CV_DEFAULT(0))
|
||||
{
|
||||
return cvMat( rows*count, cols, type, data );
|
||||
}
|
||||
|
||||
#define cvUpdateMHIByTime cvUpdateMotionHistory
|
||||
|
||||
#define cvAccMask cvAcc
|
||||
#define cvSquareAccMask cvSquareAcc
|
||||
#define cvMultiplyAccMask cvMultiplyAcc
|
||||
#define cvRunningAvgMask(imgY, imgU, mask, alpha) cvRunningAvg(imgY, imgU, alpha, mask)
|
||||
|
||||
#define cvSetHistThresh cvSetHistBinRanges
|
||||
#define cvCalcHistMask(img, mask, hist, doNotClear) cvCalcHist(img, hist, doNotClear, mask)
|
||||
|
||||
CV_INLINE double cvMean( const CvArr* image, const CvArr* mask CV_DEFAULT(0))
|
||||
{
|
||||
CvScalar mean = cvAvg( image, mask );
|
||||
return mean.val[0];
|
||||
}
|
||||
|
||||
|
||||
CV_INLINE double cvSumPixels( const CvArr* image )
|
||||
{
|
||||
CvScalar scalar = cvSum( image );
|
||||
return scalar.val[0];
|
||||
}
|
||||
|
||||
CV_INLINE void cvMean_StdDev( const CvArr* image, double* mean, double* sdv,
|
||||
const CvArr* mask CV_DEFAULT(0))
|
||||
{
|
||||
CvScalar _mean, _sdv;
|
||||
cvAvgSdv( image, &_mean, &_sdv, mask );
|
||||
|
||||
if( mean )
|
||||
*mean = _mean.val[0];
|
||||
|
||||
if( sdv )
|
||||
*sdv = _sdv.val[0];
|
||||
}
|
||||
|
||||
|
||||
CV_INLINE void cvmPerspectiveProject( const CvMat* mat, const CvArr* src, CvArr* dst )
|
||||
{
|
||||
CvMat tsrc, tdst;
|
||||
|
||||
cvReshape( src, &tsrc, 3, 0 );
|
||||
cvReshape( dst, &tdst, 3, 0 );
|
||||
|
||||
cvPerspectiveTransform( &tsrc, &tdst, mat );
|
||||
}
|
||||
|
||||
|
||||
CV_INLINE void cvFillImage( CvArr* mat, double color )
|
||||
{
|
||||
cvSet( mat, cvColorToScalar(color, cvGetElemType(mat)), 0 );
|
||||
}
|
||||
|
||||
|
||||
#define cvCvtPixToPlane cvSplit
|
||||
#define cvCvtPlaneToPix cvMerge
|
||||
|
||||
typedef struct CvRandState
|
||||
{
|
||||
CvRNG state; /* RNG state (the current seed and carry)*/
|
||||
int disttype; /* distribution type */
|
||||
CvScalar param[2]; /* parameters of RNG */
|
||||
}
|
||||
CvRandState;
|
||||
|
||||
|
||||
/* Changes RNG range while preserving RNG state */
|
||||
CV_INLINE void cvRandSetRange( CvRandState* state, double param1,
|
||||
double param2, int index CV_DEFAULT(-1))
|
||||
{
|
||||
if( !state )
|
||||
{
|
||||
cvError( CV_StsNullPtr, "cvRandSetRange", "Null pointer to RNG state", "cvcompat.h", 0 );
|
||||
return;
|
||||
}
|
||||
|
||||
if( (unsigned)(index + 1) > 4 )
|
||||
{
|
||||
cvError( CV_StsOutOfRange, "cvRandSetRange", "index is not in -1..3", "cvcompat.h", 0 );
|
||||
return;
|
||||
}
|
||||
|
||||
if( index < 0 )
|
||||
{
|
||||
state->param[0].val[0] = state->param[0].val[1] =
|
||||
state->param[0].val[2] = state->param[0].val[3] = param1;
|
||||
state->param[1].val[0] = state->param[1].val[1] =
|
||||
state->param[1].val[2] = state->param[1].val[3] = param2;
|
||||
}
|
||||
else
|
||||
{
|
||||
state->param[0].val[index] = param1;
|
||||
state->param[1].val[index] = param2;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
CV_INLINE void cvRandInit( CvRandState* state, double param1,
|
||||
double param2, int seed,
|
||||
int disttype CV_DEFAULT(CV_RAND_UNI))
|
||||
{
|
||||
if( !state )
|
||||
{
|
||||
cvError( CV_StsNullPtr, "cvRandInit", "Null pointer to RNG state", "cvcompat.h", 0 );
|
||||
return;
|
||||
}
|
||||
|
||||
if( disttype != CV_RAND_UNI && disttype != CV_RAND_NORMAL )
|
||||
{
|
||||
cvError( CV_StsBadFlag, "cvRandInit", "Unknown distribution type", "cvcompat.h", 0 );
|
||||
return;
|
||||
}
|
||||
|
||||
state->state = (uint64)(seed ? seed : -1);
|
||||
state->disttype = disttype;
|
||||
cvRandSetRange( state, param1, param2, -1 );
|
||||
}
|
||||
|
||||
|
||||
/* Fills array with random numbers */
|
||||
CV_INLINE void cvRand( CvRandState* state, CvArr* arr )
|
||||
{
|
||||
if( !state )
|
||||
{
|
||||
cvError( CV_StsNullPtr, "cvRand", "Null pointer to RNG state", "cvcompat.h", 0 );
|
||||
return;
|
||||
}
|
||||
cvRandArr( &state->state, arr, state->disttype, state->param[0], state->param[1] );
|
||||
}
|
||||
|
||||
#define cvRandNext( _state ) cvRandInt( &(_state)->state )
|
||||
|
||||
CV_INLINE void cvbRand( CvRandState* state, float* dst, int len )
|
||||
{
|
||||
CvMat mat = cvMat( 1, len, CV_32F, (void*)dst );
|
||||
cvRand( state, &mat );
|
||||
}
|
||||
|
||||
|
||||
CV_INLINE void cvbCartToPolar( const float* y, const float* x,
|
||||
float* magnitude, float* angle, int len )
|
||||
{
|
||||
CvMat mx = cvMat( 1, len, CV_32F, (void*)x );
|
||||
CvMat my = mx;
|
||||
CvMat mm = mx;
|
||||
CvMat ma = mx;
|
||||
|
||||
my.data.fl = (float*)y;
|
||||
mm.data.fl = (float*)magnitude;
|
||||
ma.data.fl = (float*)angle;
|
||||
|
||||
cvCartToPolar( &mx, &my, &mm, angle ? &ma : NULL, 1 );
|
||||
}
|
||||
|
||||
|
||||
CV_INLINE void cvbFastArctan( const float* y, const float* x,
|
||||
float* angle, int len )
|
||||
{
|
||||
CvMat mx = cvMat( 1, len, CV_32F, (void*)x );
|
||||
CvMat my = mx;
|
||||
CvMat ma = mx;
|
||||
|
||||
my.data.fl = (float*)y;
|
||||
ma.data.fl = (float*)angle;
|
||||
|
||||
cvCartToPolar( &mx, &my, NULL, &ma, 1 );
|
||||
}
|
||||
|
||||
|
||||
CV_INLINE void cvbSqrt( const float* x, float* y, int len )
|
||||
{
|
||||
CvMat mx = cvMat( 1, len, CV_32F, (void*)x );
|
||||
CvMat my = mx;
|
||||
my.data.fl = (float*)y;
|
||||
|
||||
cvPow( &mx, &my, 0.5 );
|
||||
}
|
||||
|
||||
|
||||
CV_INLINE void cvbInvSqrt( const float* x, float* y, int len )
|
||||
{
|
||||
CvMat mx = cvMat( 1, len, CV_32F, (void*)x );
|
||||
CvMat my = mx;
|
||||
my.data.fl = (float*)y;
|
||||
|
||||
cvPow( &mx, &my, -0.5 );
|
||||
}
|
||||
|
||||
|
||||
CV_INLINE void cvbReciprocal( const float* x, float* y, int len )
|
||||
{
|
||||
CvMat mx = cvMat( 1, len, CV_32F, (void*)x );
|
||||
CvMat my = mx;
|
||||
my.data.fl = (float*)y;
|
||||
|
||||
cvPow( &mx, &my, -1 );
|
||||
}
|
||||
|
||||
|
||||
CV_INLINE void cvbFastExp( const float* x, double* y, int len )
|
||||
{
|
||||
CvMat mx = cvMat( 1, len, CV_32F, (void*)x );
|
||||
CvMat my = cvMat( 1, len, CV_64F, y );
|
||||
cvExp( &mx, &my );
|
||||
}
|
||||
|
||||
|
||||
CV_INLINE void cvbFastLog( const double* x, float* y, int len )
|
||||
{
|
||||
CvMat mx = cvMat( 1, len, CV_64F, (void*)x );
|
||||
CvMat my = cvMat( 1, len, CV_32F, y );
|
||||
cvLog( &mx, &my );
|
||||
}
|
||||
|
||||
|
||||
CV_INLINE CvRect cvContourBoundingRect( void* point_set, int update CV_DEFAULT(0))
|
||||
{
|
||||
return cvBoundingRect( point_set, update );
|
||||
}
|
||||
|
||||
|
||||
CV_INLINE double cvPseudoInverse( const CvArr* src, CvArr* dst )
|
||||
{
|
||||
return cvInvert( src, dst, CV_SVD );
|
||||
}
|
||||
|
||||
#define cvPseudoInv cvPseudoInverse
|
||||
|
||||
#define cvContourMoments( contour, moments ) \
|
||||
cvMoments( contour, moments, 0 )
|
||||
|
||||
#define cvGetPtrAt cvPtr2D
|
||||
#define cvGetAt cvGet2D
|
||||
#define cvSetAt(arr,val,y,x) cvSet2D((arr),(y),(x),(val))
|
||||
|
||||
#define cvMeanMask cvMean
|
||||
#define cvMean_StdDevMask(img,mask,mean,sdv) cvMean_StdDev(img,mean,sdv,mask)
|
||||
|
||||
#define cvNormMask(imgA,imgB,mask,normType) cvNorm(imgA,imgB,normType,mask)
|
||||
|
||||
#define cvMinMaxLocMask(img, mask, min_val, max_val, min_loc, max_loc) \
|
||||
cvMinMaxLoc(img, min_val, max_val, min_loc, max_loc, mask)
|
||||
|
||||
#define cvRemoveMemoryManager cvSetMemoryManager
|
||||
|
||||
#define cvmSetZero( mat ) cvSetZero( mat )
|
||||
#define cvmSetIdentity( mat ) cvSetIdentity( mat )
|
||||
#define cvmAdd( src1, src2, dst ) cvAdd( src1, src2, dst, 0 )
|
||||
#define cvmSub( src1, src2, dst ) cvSub( src1, src2, dst, 0 )
|
||||
#define cvmCopy( src, dst ) cvCopy( src, dst, 0 )
|
||||
#define cvmMul( src1, src2, dst ) cvMatMulAdd( src1, src2, 0, dst )
|
||||
#define cvmTranspose( src, dst ) cvT( src, dst )
|
||||
#define cvmInvert( src, dst ) cvInv( src, dst )
|
||||
#define cvmMahalanobis(vec1, vec2, mat) cvMahalanobis( vec1, vec2, mat )
|
||||
#define cvmDotProduct( vec1, vec2 ) cvDotProduct( vec1, vec2 )
|
||||
#define cvmCrossProduct(vec1, vec2,dst) cvCrossProduct( vec1, vec2, dst )
|
||||
#define cvmTrace( mat ) (cvTrace( mat )).val[0]
|
||||
#define cvmMulTransposed( src, dst, order ) cvMulTransposed( src, dst, order )
|
||||
#define cvmEigenVV( mat, evec, eval, eps) cvEigenVV( mat, evec, eval, eps )
|
||||
#define cvmDet( mat ) cvDet( mat )
|
||||
#define cvmScale( src, dst, scale ) cvScale( src, dst, scale )
|
||||
|
||||
#define cvCopyImage( src, dst ) cvCopy( src, dst, 0 )
|
||||
#define cvReleaseMatHeader cvReleaseMat
|
||||
|
||||
/* Calculates exact convex hull of 2d point set */
|
||||
CV_INLINE void cvConvexHull( CvPoint* points, int num_points,
|
||||
CvRect* CV_UNREFERENCED(bound_rect),
|
||||
int orientation, int* hull, int* hullsize )
|
||||
{
|
||||
CvMat points1 = cvMat( 1, num_points, CV_32SC2, points );
|
||||
CvMat hull1 = cvMat( 1, num_points, CV_32SC1, hull );
|
||||
|
||||
cvConvexHull2( &points1, &hull1, orientation, 0 );
|
||||
*hullsize = hull1.cols;
|
||||
}
|
||||
|
||||
/* Calculates exact convex hull of 2d point set stored in a sequence */
|
||||
#define cvContourConvexHull( contour, orientation, storage ) \
|
||||
cvConvexHull2( contour, storage, orientation )
|
||||
|
||||
/* Calculates approximate convex hull of 2d point set */
|
||||
#define cvConvexHullApprox( points, num_points, bound_rect, bandwidth, \
|
||||
orientation, hull, hullsize ) \
|
||||
cvConvexHull( points, num_points, bound_rect, orientation, hull, hullsize )
|
||||
|
||||
/* Calculates approximate convex hull of 2d point set stored in a sequence */
|
||||
#define cvContourConvexHullApprox( contour, bandwidth, orientation, storage ) \
|
||||
cvConvexHull2( contour, storage, orientation )
|
||||
|
||||
|
||||
CV_INLINE void cvMinAreaRect( CvPoint* points, int n,
|
||||
int CV_UNREFERENCED(left), int CV_UNREFERENCED(bottom),
|
||||
int CV_UNREFERENCED(right), int CV_UNREFERENCED(top),
|
||||
CvPoint2D32f* anchor,
|
||||
CvPoint2D32f* vect1,
|
||||
CvPoint2D32f* vect2 )
|
||||
{
|
||||
CvMat mat = cvMat( 1, n, CV_32SC2, points );
|
||||
CvBox2D box = cvMinAreaRect2( &mat, 0 );
|
||||
CvPoint2D32f pt[4];
|
||||
|
||||
cvBoxPoints( box, pt );
|
||||
*anchor = pt[0];
|
||||
vect1->x = pt[1].x - pt[0].x;
|
||||
vect1->y = pt[1].y - pt[0].y;
|
||||
vect2->x = pt[3].x - pt[0].x;
|
||||
vect2->y = pt[3].y - pt[0].y;
|
||||
|
||||
CV_UNREFERENCED( (left, bottom, right, top) );
|
||||
}
|
||||
|
||||
typedef int CvDisType;
|
||||
typedef int CvChainApproxMethod;
|
||||
typedef int CvContourRetrievalMode;
|
||||
|
||||
CV_INLINE void cvFitLine3D( CvPoint3D32f* points, int count, int dist,
|
||||
void *param, float reps, float aeps, float* line )
|
||||
{
|
||||
CvMat mat = cvMat( 1, count, CV_32FC3, points );
|
||||
float _param = param != NULL ? *(float*)param : 0.f;
|
||||
assert( dist != CV_DIST_USER );
|
||||
cvFitLine( &mat, dist, _param, reps, aeps, line );
|
||||
}
|
||||
|
||||
/* Fits a line into set of 2d points in a robust way (M-estimator technique) */
|
||||
CV_INLINE void cvFitLine2D( CvPoint2D32f* points, int count, int dist,
|
||||
void *param, float reps, float aeps, float* line )
|
||||
{
|
||||
CvMat mat = cvMat( 1, count, CV_32FC2, points );
|
||||
float _param = param != NULL ? *(float*)param : 0.f;
|
||||
assert( dist != CV_DIST_USER );
|
||||
cvFitLine( &mat, dist, _param, reps, aeps, line );
|
||||
}
|
||||
|
||||
|
||||
CV_INLINE void cvFitEllipse( const CvPoint2D32f* points, int count, CvBox2D* box )
|
||||
{
|
||||
CvMat mat = cvMat( 1, count, CV_32FC2, (void*)points );
|
||||
*box = cvFitEllipse2( &mat );
|
||||
}
|
||||
|
||||
/* Projects 2d points to one of standard coordinate planes
|
||||
(i.e. removes one of coordinates) */
|
||||
CV_INLINE void cvProject3D( CvPoint3D32f* points3D, int count,
|
||||
CvPoint2D32f* points2D,
|
||||
int xIndx CV_DEFAULT(0),
|
||||
int yIndx CV_DEFAULT(1))
|
||||
{
|
||||
CvMat src = cvMat( 1, count, CV_32FC3, points3D );
|
||||
CvMat dst = cvMat( 1, count, CV_32FC2, points2D );
|
||||
float m[6] = {0,0,0,0,0,0};
|
||||
CvMat M = cvMat( 2, 3, CV_32F, m );
|
||||
|
||||
assert( (unsigned)xIndx < 3 && (unsigned)yIndx < 3 );
|
||||
m[xIndx] = m[yIndx+3] = 1.f;
|
||||
|
||||
cvTransform( &src, &dst, &M, NULL );
|
||||
}
|
||||
|
||||
|
||||
/* Retrieves value of the particular bin
|
||||
of x-dimensional (x=1,2,3,...) histogram */
|
||||
#define cvQueryHistValue_1D( hist, idx0 ) \
|
||||
((float)cvGetReal1D( (hist)->bins, (idx0)))
|
||||
#define cvQueryHistValue_2D( hist, idx0, idx1 ) \
|
||||
((float)cvGetReal2D( (hist)->bins, (idx0), (idx1)))
|
||||
#define cvQueryHistValue_3D( hist, idx0, idx1, idx2 ) \
|
||||
((float)cvGetReal3D( (hist)->bins, (idx0), (idx1), (idx2)))
|
||||
#define cvQueryHistValue_nD( hist, idx ) \
|
||||
((float)cvGetRealND( (hist)->bins, (idx)))
|
||||
|
||||
/* Returns pointer to the particular bin of x-dimesional histogram.
|
||||
For sparse histogram the bin is created if it didn't exist before */
|
||||
#define cvGetHistValue_1D( hist, idx0 ) \
|
||||
((float*)cvPtr1D( (hist)->bins, (idx0), 0))
|
||||
#define cvGetHistValue_2D( hist, idx0, idx1 ) \
|
||||
((float*)cvPtr2D( (hist)->bins, (idx0), (idx1), 0))
|
||||
#define cvGetHistValue_3D( hist, idx0, idx1, idx2 ) \
|
||||
((float*)cvPtr3D( (hist)->bins, (idx0), (idx1), (idx2), 0))
|
||||
#define cvGetHistValue_nD( hist, idx ) \
|
||||
((float*)cvPtrND( (hist)->bins, (idx), 0))
|
||||
|
||||
|
||||
#define CV_IS_SET_ELEM_EXISTS CV_IS_SET_ELEM
|
||||
|
||||
|
||||
CV_INLINE int cvHoughLines( CvArr* image, double rho,
|
||||
double theta, int threshold,
|
||||
float* lines, int linesNumber )
|
||||
{
|
||||
CvMat linesMat = cvMat( 1, linesNumber, CV_32FC2, lines );
|
||||
cvHoughLines2( image, &linesMat, CV_HOUGH_STANDARD,
|
||||
rho, theta, threshold, 0, 0 );
|
||||
|
||||
return linesMat.cols;
|
||||
}
|
||||
|
||||
|
||||
CV_INLINE int cvHoughLinesP( CvArr* image, double rho,
|
||||
double theta, int threshold,
|
||||
int lineLength, int lineGap,
|
||||
int* lines, int linesNumber )
|
||||
{
|
||||
CvMat linesMat = cvMat( 1, linesNumber, CV_32SC4, lines );
|
||||
cvHoughLines2( image, &linesMat, CV_HOUGH_PROBABILISTIC,
|
||||
rho, theta, threshold, lineLength, lineGap );
|
||||
|
||||
return linesMat.cols;
|
||||
}
|
||||
|
||||
|
||||
CV_INLINE int cvHoughLinesSDiv( CvArr* image, double rho, int srn,
|
||||
double theta, int stn, int threshold,
|
||||
float* lines, int linesNumber )
|
||||
{
|
||||
CvMat linesMat = cvMat( 1, linesNumber, CV_32FC2, lines );
|
||||
cvHoughLines2( image, &linesMat, CV_HOUGH_MULTI_SCALE,
|
||||
rho, theta, threshold, srn, stn );
|
||||
|
||||
return linesMat.cols;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
CV_INLINE float cvCalcEMD( const float* signature1, int size1,
|
||||
const float* signature2, int size2,
|
||||
int dims, int dist_type CV_DEFAULT(CV_DIST_L2),
|
||||
CvDistanceFunction dist_func CV_DEFAULT(0),
|
||||
float* lower_bound CV_DEFAULT(0),
|
||||
void* user_param CV_DEFAULT(0))
|
||||
{
|
||||
CvMat sign1 = cvMat( size1, dims + 1, CV_32FC1, (void*)signature1 );
|
||||
CvMat sign2 = cvMat( size2, dims + 1, CV_32FC1, (void*)signature2 );
|
||||
|
||||
return cvCalcEMD2( &sign1, &sign2, dist_type, dist_func, 0, 0, lower_bound, user_param );
|
||||
}
|
||||
|
||||
|
||||
CV_INLINE void cvKMeans( int num_clusters, float** samples,
|
||||
int num_samples, int vec_size,
|
||||
CvTermCriteria termcrit, int* cluster_idx )
|
||||
{
|
||||
CvMat* samples_mat = cvCreateMat( num_samples, vec_size, CV_32FC1 );
|
||||
CvMat cluster_idx_mat = cvMat( num_samples, 1, CV_32SC1, cluster_idx );
|
||||
int i;
|
||||
for( i = 0; i < num_samples; i++ )
|
||||
memcpy( samples_mat->data.fl + i*vec_size, samples[i], vec_size*sizeof(float));
|
||||
cvKMeans2( samples_mat, num_clusters, &cluster_idx_mat, termcrit, 1, 0, 0, 0, 0 );
|
||||
cvReleaseMat( &samples_mat );
|
||||
}
|
||||
|
||||
|
||||
CV_INLINE void cvStartScanGraph( CvGraph* graph, CvGraphScanner* scanner,
|
||||
CvGraphVtx* vtx CV_DEFAULT(NULL),
|
||||
int mask CV_DEFAULT(CV_GRAPH_ALL_ITEMS))
|
||||
{
|
||||
CvGraphScanner* temp_scanner;
|
||||
|
||||
if( !scanner )
|
||||
cvError( CV_StsNullPtr, "cvStartScanGraph", "Null scanner pointer", "cvcompat.h", 0 );
|
||||
|
||||
temp_scanner = cvCreateGraphScanner( graph, vtx, mask );
|
||||
*scanner = *temp_scanner;
|
||||
cvFree( &temp_scanner );
|
||||
}
|
||||
|
||||
|
||||
CV_INLINE void cvEndScanGraph( CvGraphScanner* scanner )
|
||||
{
|
||||
if( !scanner )
|
||||
cvError( CV_StsNullPtr, "cvEndScanGraph", "Null scanner pointer", "cvcompat.h", 0 );
|
||||
|
||||
if( scanner->stack )
|
||||
{
|
||||
CvGraphScanner* temp_scanner = (CvGraphScanner*)cvAlloc( sizeof(*temp_scanner) );
|
||||
*temp_scanner = *scanner;
|
||||
cvReleaseGraphScanner( &temp_scanner );
|
||||
memset( scanner, 0, sizeof(*scanner) );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* old drawing functions */
|
||||
CV_INLINE void cvLineAA( CvArr* img, CvPoint pt1, CvPoint pt2,
|
||||
double color, int scale CV_DEFAULT(0))
|
||||
{
|
||||
cvLine( img, pt1, pt2, cvColorToScalar(color, cvGetElemType(img)), 1, CV_AA, scale );
|
||||
}
|
||||
|
||||
CV_INLINE void cvCircleAA( CvArr* img, CvPoint center, int radius,
|
||||
double color, int scale CV_DEFAULT(0) )
|
||||
{
|
||||
cvCircle( img, center, radius, cvColorToScalar(color, cvGetElemType(img)), 1, CV_AA, scale );
|
||||
}
|
||||
|
||||
CV_INLINE void cvEllipseAA( CvArr* img, CvPoint center, CvSize axes,
|
||||
double angle, double start_angle,
|
||||
double end_angle, double color,
|
||||
int scale CV_DEFAULT(0) )
|
||||
{
|
||||
cvEllipse( img, center, axes, angle, start_angle, end_angle,
|
||||
cvColorToScalar(color, cvGetElemType(img)), 1, CV_AA, scale );
|
||||
}
|
||||
|
||||
CV_INLINE void cvPolyLineAA( CvArr* img, CvPoint** pts, int* npts, int contours,
|
||||
int is_closed, double color, int scale CV_DEFAULT(0) )
|
||||
{
|
||||
cvPolyLine( img, pts, npts, contours, is_closed,
|
||||
cvColorToScalar(color, cvGetElemType(img)),
|
||||
1, CV_AA, scale );
|
||||
}
|
||||
|
||||
|
||||
|
||||
/****************************************************************************************\
|
||||
* Pixel Access Macros *
|
||||
\****************************************************************************************/
|
||||
|
||||
typedef struct _CvPixelPosition8u
|
||||
{
|
||||
uchar* currline; /* pointer to the start of the current pixel line */
|
||||
uchar* topline; /* pointer to the start of the top pixel line */
|
||||
uchar* bottomline; /* pointer to the start of the first line */
|
||||
/* which is below the image */
|
||||
int x; /* current x coordinate ( in pixels ) */
|
||||
int width; /* width of the image ( in pixels ) */
|
||||
int height; /* height of the image ( in pixels ) */
|
||||
int step; /* distance between lines ( in elements of single */
|
||||
/* plane ) */
|
||||
int step_arr[3]; /* array: ( 0, -step, step ). It is used for */
|
||||
/* vertical moving */
|
||||
} CvPixelPosition8u;
|
||||
|
||||
/* this structure differs from the above only in data type */
|
||||
typedef struct _CvPixelPosition8s
|
||||
{
|
||||
schar* currline;
|
||||
schar* topline;
|
||||
schar* bottomline;
|
||||
int x;
|
||||
int width;
|
||||
int height;
|
||||
int step;
|
||||
int step_arr[3];
|
||||
} CvPixelPosition8s;
|
||||
|
||||
/* this structure differs from the CvPixelPosition8u only in data type */
|
||||
typedef struct _CvPixelPosition32f
|
||||
{
|
||||
float* currline;
|
||||
float* topline;
|
||||
float* bottomline;
|
||||
int x;
|
||||
int width;
|
||||
int height;
|
||||
int step;
|
||||
int step_arr[3];
|
||||
} CvPixelPosition32f;
|
||||
|
||||
|
||||
/* Initialize one of the CvPixelPosition structures. */
|
||||
/* pos - initialized structure */
|
||||
/* origin - pointer to the left-top corner of the ROI */
|
||||
/* step - width of the whole image in bytes */
|
||||
/* roi - width & height of the ROI */
|
||||
/* x, y - initial position */
|
||||
#define CV_INIT_PIXEL_POS(pos, origin, _step, roi, _x, _y, orientation) \
|
||||
( \
|
||||
(pos).step = (_step)/sizeof((pos).currline[0]) * (orientation ? -1 : 1), \
|
||||
(pos).width = (roi).width, \
|
||||
(pos).height = (roi).height, \
|
||||
(pos).bottomline = (origin) + (pos).step*(pos).height, \
|
||||
(pos).topline = (origin) - (pos).step, \
|
||||
(pos).step_arr[0] = 0, \
|
||||
(pos).step_arr[1] = -(pos).step, \
|
||||
(pos).step_arr[2] = (pos).step, \
|
||||
(pos).x = (_x), \
|
||||
(pos).currline = (origin) + (pos).step*(_y) )
|
||||
|
||||
|
||||
/* Move to specified point ( absolute shift ) */
|
||||
/* pos - position structure */
|
||||
/* x, y - coordinates of the new position */
|
||||
/* cs - number of the image channels */
|
||||
#define CV_MOVE_TO( pos, _x, _y, cs ) \
|
||||
((pos).currline = (_y) >= 0 && (_y) < (pos).height ? (pos).topline + ((_y)+1)*(pos).step : 0, \
|
||||
(pos).x = (_x) >= 0 && (_x) < (pos).width ? (_x) : 0, (pos).currline + (_x) * (cs) )
|
||||
|
||||
/* Get current coordinates */
|
||||
/* pos - position structure */
|
||||
/* x, y - coordinates of the new position */
|
||||
/* cs - number of the image channels */
|
||||
#define CV_GET_CURRENT( pos, cs ) ((pos).currline + (pos).x * (cs))
|
||||
|
||||
/* Move by one pixel relatively to current position */
|
||||
/* pos - position structure */
|
||||
/* cs - number of the image channels */
|
||||
|
||||
/* left */
|
||||
#define CV_MOVE_LEFT( pos, cs ) \
|
||||
( --(pos).x >= 0 ? (pos).currline + (pos).x*(cs) : 0 )
|
||||
|
||||
/* right */
|
||||
#define CV_MOVE_RIGHT( pos, cs ) \
|
||||
( ++(pos).x < (pos).width ? (pos).currline + (pos).x*(cs) : 0 )
|
||||
|
||||
/* up */
|
||||
#define CV_MOVE_UP( pos, cs ) \
|
||||
(((pos).currline -= (pos).step) != (pos).topline ? (pos).currline + (pos).x*(cs) : 0 )
|
||||
|
||||
/* down */
|
||||
#define CV_MOVE_DOWN( pos, cs ) \
|
||||
(((pos).currline += (pos).step) != (pos).bottomline ? (pos).currline + (pos).x*(cs) : 0 )
|
||||
|
||||
/* left up */
|
||||
#define CV_MOVE_LU( pos, cs ) ( CV_MOVE_LEFT(pos, cs), CV_MOVE_UP(pos, cs))
|
||||
|
||||
/* right up */
|
||||
#define CV_MOVE_RU( pos, cs ) ( CV_MOVE_RIGHT(pos, cs), CV_MOVE_UP(pos, cs))
|
||||
|
||||
/* left down */
|
||||
#define CV_MOVE_LD( pos, cs ) ( CV_MOVE_LEFT(pos, cs), CV_MOVE_DOWN(pos, cs))
|
||||
|
||||
/* right down */
|
||||
#define CV_MOVE_RD( pos, cs ) ( CV_MOVE_RIGHT(pos, cs), CV_MOVE_DOWN(pos, cs))
|
||||
|
||||
|
||||
|
||||
/* Move by one pixel relatively to current position with wrapping when the position */
|
||||
/* achieves image boundary */
|
||||
/* pos - position structure */
|
||||
/* cs - number of the image channels */
|
||||
|
||||
/* left */
|
||||
#define CV_MOVE_LEFT_WRAP( pos, cs ) \
|
||||
((pos).currline + ( --(pos).x >= 0 ? (pos).x : ((pos).x = (pos).width-1))*(cs))
|
||||
|
||||
/* right */
|
||||
#define CV_MOVE_RIGHT_WRAP( pos, cs ) \
|
||||
((pos).currline + ( ++(pos).x < (pos).width ? (pos).x : ((pos).x = 0))*(cs) )
|
||||
|
||||
/* up */
|
||||
#define CV_MOVE_UP_WRAP( pos, cs ) \
|
||||
((((pos).currline -= (pos).step) != (pos).topline ? \
|
||||
(pos).currline : ((pos).currline = (pos).bottomline - (pos).step)) + (pos).x*(cs) )
|
||||
|
||||
/* down */
|
||||
#define CV_MOVE_DOWN_WRAP( pos, cs ) \
|
||||
((((pos).currline += (pos).step) != (pos).bottomline ? \
|
||||
(pos).currline : ((pos).currline = (pos).topline + (pos).step)) + (pos).x*(cs) )
|
||||
|
||||
/* left up */
|
||||
#define CV_MOVE_LU_WRAP( pos, cs ) ( CV_MOVE_LEFT_WRAP(pos, cs), CV_MOVE_UP_WRAP(pos, cs))
|
||||
/* right up */
|
||||
#define CV_MOVE_RU_WRAP( pos, cs ) ( CV_MOVE_RIGHT_WRAP(pos, cs), CV_MOVE_UP_WRAP(pos, cs))
|
||||
/* left down */
|
||||
#define CV_MOVE_LD_WRAP( pos, cs ) ( CV_MOVE_LEFT_WRAP(pos, cs), CV_MOVE_DOWN_WRAP(pos, cs))
|
||||
/* right down */
|
||||
#define CV_MOVE_RD_WRAP( pos, cs ) ( CV_MOVE_RIGHT_WRAP(pos, cs), CV_MOVE_DOWN_WRAP(pos, cs))
|
||||
|
||||
/* Numeric constants which used for moving in arbitrary direction */
|
||||
#define CV_SHIFT_NONE 2
|
||||
#define CV_SHIFT_LEFT 1
|
||||
#define CV_SHIFT_RIGHT 3
|
||||
#define CV_SHIFT_UP 6
|
||||
#define CV_SHIFT_DOWN 10
|
||||
#define CV_SHIFT_LU 5
|
||||
#define CV_SHIFT_RU 7
|
||||
#define CV_SHIFT_LD 9
|
||||
#define CV_SHIFT_RD 11
|
||||
|
||||
/* Move by one pixel in specified direction */
|
||||
/* pos - position structure */
|
||||
/* shift - direction ( it's value must be one of the CV_SHIFT_<54> constants ) */
|
||||
/* cs - number of the image channels */
|
||||
#define CV_MOVE_PARAM( pos, shift, cs ) \
|
||||
( (pos).currline += (pos).step_arr[(shift)>>2], (pos).x += ((shift)&3)-2, \
|
||||
((pos).currline != (pos).topline && (pos).currline != (pos).bottomline && \
|
||||
(pos).x >= 0 && (pos).x < (pos).width) ? (pos).currline + (pos).x*(cs) : 0 )
|
||||
|
||||
/* Move by one pixel in specified direction with wrapping when the */
|
||||
/* position achieves image boundary */
|
||||
/* pos - position structure */
|
||||
/* shift - direction ( it's value must be one of the CV_SHIFT_<54> constants ) */
|
||||
/* cs - number of the image channels */
|
||||
#define CV_MOVE_PARAM_WRAP( pos, shift, cs ) \
|
||||
( (pos).currline += (pos).step_arr[(shift)>>2], \
|
||||
(pos).currline = ((pos).currline == (pos).topline ? \
|
||||
(pos).bottomline - (pos).step : \
|
||||
(pos).currline == (pos).bottomline ? \
|
||||
(pos).topline + (pos).step : (pos).currline), \
|
||||
\
|
||||
(pos).x += ((shift)&3)-2, \
|
||||
(pos).x = ((pos).x < 0 ? (pos).width-1 : (pos).x >= (pos).width ? 0 : (pos).x), \
|
||||
\
|
||||
(pos).currline + (pos).x*(cs) )
|
||||
|
||||
|
||||
typedef float* CvVect32f;
|
||||
typedef float* CvMatr32f;
|
||||
typedef double* CvVect64d;
|
||||
typedef double* CvMatr64d;
|
||||
|
||||
typedef struct CvMatrix3
|
||||
{
|
||||
float m[3][3];
|
||||
}
|
||||
CvMatrix3;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
579
modules/imgproc/include/opencv2/imgproc/imgproc.hpp
Normal file
579
modules/imgproc/include/opencv2/imgproc/imgproc.hpp
Normal file
@@ -0,0 +1,579 @@
|
||||
/*M///////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
|
||||
//
|
||||
// By downloading, copying, installing or using the software you agree to this license.
|
||||
// If you do not agree to this license, do not download, install,
|
||||
// copy or use the software.
|
||||
//
|
||||
//
|
||||
// License Agreement
|
||||
// For Open Source Computer Vision Library
|
||||
//
|
||||
// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
|
||||
// Copyright (C) 2009, Willow Garage Inc., all rights reserved.
|
||||
// Third party copyrights are property of their respective owners.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification,
|
||||
// are permitted provided that the following conditions are met:
|
||||
//
|
||||
// * Redistribution's of source code must retain the above copyright notice,
|
||||
// this list of conditions and the following disclaimer.
|
||||
//
|
||||
// * Redistribution's in binary form must reproduce the above copyright notice,
|
||||
// this list of conditions and the following disclaimer in the documentation
|
||||
// and/or other materials provided with the distribution.
|
||||
//
|
||||
// * The name of the copyright holders may not be used to endorse or promote products
|
||||
// derived from this software without specific prior written permission.
|
||||
//
|
||||
// This software is provided by the copyright holders and contributors "as is" and
|
||||
// any express or implied warranties, including, but not limited to, the implied
|
||||
// warranties of merchantability and fitness for a particular purpose are disclaimed.
|
||||
// In no event shall the Intel Corporation or contributors be liable for any direct,
|
||||
// indirect, incidental, special, exemplary, or consequential damages
|
||||
// (including, but not limited to, procurement of substitute goods or services;
|
||||
// loss of use, data, or profits; or business interruption) however caused
|
||||
// and on any theory of liability, whether in contract, strict liability,
|
||||
// or tort (including negligence or otherwise) arising in any way out of
|
||||
// the use of this software, even if advised of the possibility of such damage.
|
||||
//
|
||||
//M*/
|
||||
|
||||
#ifndef __OPENCV_IMGPROC_HPP__
|
||||
#define __OPENCV_IMGPROC_HPP__
|
||||
|
||||
#include "opencv2/core/core.hpp"
|
||||
#include "opencv2/imgproc/types_c.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
namespace cv
|
||||
{
|
||||
|
||||
enum { BORDER_REPLICATE=IPL_BORDER_REPLICATE, BORDER_CONSTANT=IPL_BORDER_CONSTANT,
|
||||
BORDER_REFLECT=IPL_BORDER_REFLECT, BORDER_REFLECT_101=IPL_BORDER_REFLECT_101,
|
||||
BORDER_REFLECT101=BORDER_REFLECT_101, BORDER_WRAP=IPL_BORDER_WRAP,
|
||||
BORDER_TRANSPARENT, BORDER_DEFAULT=BORDER_REFLECT_101, BORDER_ISOLATED=16 };
|
||||
|
||||
CV_EXPORTS int borderInterpolate( int p, int len, int borderType );
|
||||
|
||||
class CV_EXPORTS BaseRowFilter
|
||||
{
|
||||
public:
|
||||
BaseRowFilter();
|
||||
virtual ~BaseRowFilter();
|
||||
virtual void operator()(const uchar* src, uchar* dst,
|
||||
int width, int cn) = 0;
|
||||
int ksize, anchor;
|
||||
};
|
||||
|
||||
|
||||
class CV_EXPORTS BaseColumnFilter
|
||||
{
|
||||
public:
|
||||
BaseColumnFilter();
|
||||
virtual ~BaseColumnFilter();
|
||||
virtual void operator()(const uchar** src, uchar* dst, int dststep,
|
||||
int dstcount, int width) = 0;
|
||||
virtual void reset();
|
||||
int ksize, anchor;
|
||||
};
|
||||
|
||||
|
||||
class CV_EXPORTS BaseFilter
|
||||
{
|
||||
public:
|
||||
BaseFilter();
|
||||
virtual ~BaseFilter();
|
||||
virtual void operator()(const uchar** src, uchar* dst, int dststep,
|
||||
int dstcount, int width, int cn) = 0;
|
||||
virtual void reset();
|
||||
Size ksize;
|
||||
Point anchor;
|
||||
};
|
||||
|
||||
|
||||
class CV_EXPORTS FilterEngine
|
||||
{
|
||||
public:
|
||||
FilterEngine();
|
||||
FilterEngine(const Ptr<BaseFilter>& _filter2D,
|
||||
const Ptr<BaseRowFilter>& _rowFilter,
|
||||
const Ptr<BaseColumnFilter>& _columnFilter,
|
||||
int srcType, int dstType, int bufType,
|
||||
int _rowBorderType=BORDER_REPLICATE,
|
||||
int _columnBorderType=-1,
|
||||
const Scalar& _borderValue=Scalar());
|
||||
virtual ~FilterEngine();
|
||||
void init(const Ptr<BaseFilter>& _filter2D,
|
||||
const Ptr<BaseRowFilter>& _rowFilter,
|
||||
const Ptr<BaseColumnFilter>& _columnFilter,
|
||||
int srcType, int dstType, int bufType,
|
||||
int _rowBorderType=BORDER_REPLICATE, int _columnBorderType=-1,
|
||||
const Scalar& _borderValue=Scalar());
|
||||
virtual int start(Size wholeSize, Rect roi, int maxBufRows=-1);
|
||||
virtual int start(const Mat& src, const Rect& srcRoi=Rect(0,0,-1,-1),
|
||||
bool isolated=false, int maxBufRows=-1);
|
||||
virtual int proceed(const uchar* src, int srcStep, int srcCount,
|
||||
uchar* dst, int dstStep);
|
||||
virtual void apply( const Mat& src, Mat& dst,
|
||||
const Rect& srcRoi=Rect(0,0,-1,-1),
|
||||
Point dstOfs=Point(0,0),
|
||||
bool isolated=false);
|
||||
bool isSeparable() const { return (const BaseFilter*)filter2D == 0; }
|
||||
int remainingInputRows() const;
|
||||
int remainingOutputRows() const;
|
||||
|
||||
int srcType, dstType, bufType;
|
||||
Size ksize;
|
||||
Point anchor;
|
||||
int maxWidth;
|
||||
Size wholeSize;
|
||||
Rect roi;
|
||||
int dx1, dx2;
|
||||
int rowBorderType, columnBorderType;
|
||||
vector<int> borderTab;
|
||||
int borderElemSize;
|
||||
vector<uchar> ringBuf;
|
||||
vector<uchar> srcRow;
|
||||
vector<uchar> constBorderValue;
|
||||
vector<uchar> constBorderRow;
|
||||
int bufStep, startY, startY0, endY, rowCount, dstY;
|
||||
vector<uchar*> rows;
|
||||
|
||||
Ptr<BaseFilter> filter2D;
|
||||
Ptr<BaseRowFilter> rowFilter;
|
||||
Ptr<BaseColumnFilter> columnFilter;
|
||||
};
|
||||
|
||||
enum { KERNEL_GENERAL=0, KERNEL_SYMMETRICAL=1, KERNEL_ASYMMETRICAL=2,
|
||||
KERNEL_SMOOTH=4, KERNEL_INTEGER=8 };
|
||||
|
||||
CV_EXPORTS int getKernelType(const Mat& kernel, Point anchor);
|
||||
|
||||
CV_EXPORTS Ptr<BaseRowFilter> getLinearRowFilter(int srcType, int bufType,
|
||||
const Mat& kernel, int anchor,
|
||||
int symmetryType);
|
||||
|
||||
CV_EXPORTS Ptr<BaseColumnFilter> getLinearColumnFilter(int bufType, int dstType,
|
||||
const Mat& kernel, int anchor,
|
||||
int symmetryType, double delta=0,
|
||||
int bits=0);
|
||||
|
||||
CV_EXPORTS Ptr<BaseFilter> getLinearFilter(int srcType, int dstType,
|
||||
const Mat& kernel,
|
||||
Point anchor=Point(-1,-1),
|
||||
double delta=0, int bits=0);
|
||||
|
||||
CV_EXPORTS Ptr<FilterEngine> createSeparableLinearFilter(int srcType, int dstType,
|
||||
const Mat& rowKernel, const Mat& columnKernel,
|
||||
Point _anchor=Point(-1,-1), double delta=0,
|
||||
int _rowBorderType=BORDER_DEFAULT,
|
||||
int _columnBorderType=-1,
|
||||
const Scalar& _borderValue=Scalar());
|
||||
|
||||
CV_EXPORTS Ptr<FilterEngine> createLinearFilter(int srcType, int dstType,
|
||||
const Mat& kernel, Point _anchor=Point(-1,-1),
|
||||
double delta=0, int _rowBorderType=BORDER_DEFAULT,
|
||||
int _columnBorderType=-1, const Scalar& _borderValue=Scalar());
|
||||
|
||||
CV_EXPORTS Mat getGaussianKernel( int ksize, double sigma, int ktype=CV_64F );
|
||||
|
||||
CV_EXPORTS Ptr<FilterEngine> createGaussianFilter( int type, Size ksize,
|
||||
double sigma1, double sigma2=0,
|
||||
int borderType=BORDER_DEFAULT);
|
||||
|
||||
CV_EXPORTS void getDerivKernels( Mat& kx, Mat& ky, int dx, int dy, int ksize,
|
||||
bool normalize=false, int ktype=CV_32F );
|
||||
|
||||
CV_EXPORTS Ptr<FilterEngine> createDerivFilter( int srcType, int dstType,
|
||||
int dx, int dy, int ksize,
|
||||
int borderType=BORDER_DEFAULT );
|
||||
|
||||
CV_EXPORTS Ptr<BaseRowFilter> getRowSumFilter(int srcType, int sumType,
|
||||
int ksize, int anchor=-1);
|
||||
CV_EXPORTS Ptr<BaseColumnFilter> getColumnSumFilter(int sumType, int dstType,
|
||||
int ksize, int anchor=-1,
|
||||
double scale=1);
|
||||
CV_EXPORTS Ptr<FilterEngine> createBoxFilter( int srcType, int dstType, Size ksize,
|
||||
Point anchor=Point(-1,-1),
|
||||
bool normalize=true,
|
||||
int borderType=BORDER_DEFAULT);
|
||||
|
||||
enum { MORPH_ERODE=0, MORPH_DILATE=1, MORPH_OPEN=2, MORPH_CLOSE=3,
|
||||
MORPH_GRADIENT=4, MORPH_TOPHAT=5, MORPH_BLACKHAT=6 };
|
||||
|
||||
CV_EXPORTS Ptr<BaseRowFilter> getMorphologyRowFilter(int op, int type, int ksize, int anchor=-1);
|
||||
CV_EXPORTS Ptr<BaseColumnFilter> getMorphologyColumnFilter(int op, int type, int ksize, int anchor=-1);
|
||||
CV_EXPORTS Ptr<BaseFilter> getMorphologyFilter(int op, int type, const Mat& kernel,
|
||||
Point anchor=Point(-1,-1));
|
||||
|
||||
static inline Scalar morphologyDefaultBorderValue() { return Scalar::all(DBL_MAX); }
|
||||
|
||||
CV_EXPORTS Ptr<FilterEngine> createMorphologyFilter(int op, int type, const Mat& kernel,
|
||||
Point anchor=Point(-1,-1), int _rowBorderType=BORDER_CONSTANT,
|
||||
int _columnBorderType=-1,
|
||||
const Scalar& _borderValue=morphologyDefaultBorderValue());
|
||||
|
||||
enum { MORPH_RECT=0, MORPH_CROSS=1, MORPH_ELLIPSE=2 };
|
||||
CV_EXPORTS Mat getStructuringElement(int shape, Size ksize, Point anchor=Point(-1,-1));
|
||||
|
||||
template<> CV_EXPORTS void Ptr<IplConvKernel>::delete_obj();
|
||||
|
||||
CV_EXPORTS void copyMakeBorder( const Mat& src, Mat& dst,
|
||||
int top, int bottom, int left, int right,
|
||||
int borderType, const Scalar& value=Scalar() );
|
||||
|
||||
CV_EXPORTS void medianBlur( const Mat& src, Mat& dst, int ksize );
|
||||
CV_EXPORTS void GaussianBlur( const Mat& src, Mat& dst, Size ksize,
|
||||
double sigma1, double sigma2=0,
|
||||
int borderType=BORDER_DEFAULT );
|
||||
CV_EXPORTS void bilateralFilter( const Mat& src, Mat& dst, int d,
|
||||
double sigmaColor, double sigmaSpace,
|
||||
int borderType=BORDER_DEFAULT );
|
||||
CV_EXPORTS void boxFilter( const Mat& src, Mat& dst, int ddepth,
|
||||
Size ksize, Point anchor=Point(-1,-1),
|
||||
bool normalize=true,
|
||||
int borderType=BORDER_DEFAULT );
|
||||
static inline void blur( const Mat& src, Mat& dst,
|
||||
Size ksize, Point anchor=Point(-1,-1),
|
||||
int borderType=BORDER_DEFAULT )
|
||||
{
|
||||
boxFilter( src, dst, -1, ksize, anchor, true, borderType );
|
||||
}
|
||||
|
||||
CV_EXPORTS void filter2D( const Mat& src, Mat& dst, int ddepth,
|
||||
const Mat& kernel, Point anchor=Point(-1,-1),
|
||||
double delta=0, int borderType=BORDER_DEFAULT );
|
||||
|
||||
CV_EXPORTS void sepFilter2D( const Mat& src, Mat& dst, int ddepth,
|
||||
const Mat& kernelX, const Mat& kernelY,
|
||||
Point anchor=Point(-1,-1),
|
||||
double delta=0, int borderType=BORDER_DEFAULT );
|
||||
|
||||
CV_EXPORTS void Sobel( const Mat& src, Mat& dst, int ddepth,
|
||||
int dx, int dy, int ksize=3,
|
||||
double scale=1, double delta=0,
|
||||
int borderType=BORDER_DEFAULT );
|
||||
|
||||
CV_EXPORTS void Scharr( const Mat& src, Mat& dst, int ddepth,
|
||||
int dx, int dy, double scale=1, double delta=0,
|
||||
int borderType=BORDER_DEFAULT );
|
||||
|
||||
CV_EXPORTS void Laplacian( const Mat& src, Mat& dst, int ddepth,
|
||||
int ksize=1, double scale=1, double delta=0,
|
||||
int borderType=BORDER_DEFAULT );
|
||||
|
||||
CV_EXPORTS void Canny( const Mat& image, Mat& edges,
|
||||
double threshold1, double threshold2,
|
||||
int apertureSize=3, bool L2gradient=false );
|
||||
|
||||
CV_EXPORTS void cornerMinEigenVal( const Mat& src, Mat& dst,
|
||||
int blockSize, int ksize=3,
|
||||
int borderType=BORDER_DEFAULT );
|
||||
|
||||
CV_EXPORTS void cornerHarris( const Mat& src, Mat& dst, int blockSize,
|
||||
int ksize, double k,
|
||||
int borderType=BORDER_DEFAULT );
|
||||
|
||||
CV_EXPORTS void cornerEigenValsAndVecs( const Mat& src, Mat& dst,
|
||||
int blockSize, int ksize,
|
||||
int borderType=BORDER_DEFAULT );
|
||||
|
||||
CV_EXPORTS void preCornerDetect( const Mat& src, Mat& dst, int ksize,
|
||||
int borderType=BORDER_DEFAULT );
|
||||
|
||||
CV_EXPORTS void cornerSubPix( const Mat& image, vector<Point2f>& corners,
|
||||
Size winSize, Size zeroZone,
|
||||
TermCriteria criteria );
|
||||
|
||||
CV_EXPORTS void goodFeaturesToTrack( const Mat& image, vector<Point2f>& corners,
|
||||
int maxCorners, double qualityLevel, double minDistance,
|
||||
const Mat& mask=Mat(), int blockSize=3,
|
||||
bool useHarrisDetector=false, double k=0.04 );
|
||||
|
||||
CV_EXPORTS void HoughLines( const Mat& image, vector<Vec2f>& lines,
|
||||
double rho, double theta, int threshold,
|
||||
double srn=0, double stn=0 );
|
||||
|
||||
CV_EXPORTS void HoughLinesP( Mat& image, vector<Vec4i>& lines,
|
||||
double rho, double theta, int threshold,
|
||||
double minLineLength=0, double maxLineGap=0 );
|
||||
|
||||
CV_EXPORTS void HoughCircles( const Mat& image, vector<Vec3f>& circles,
|
||||
int method, double dp, double minDist,
|
||||
double param1=100, double param2=100,
|
||||
int minRadius=0, int maxRadius=0 );
|
||||
|
||||
CV_EXPORTS void erode( const Mat& src, Mat& dst, const Mat& kernel,
|
||||
Point anchor=Point(-1,-1), int iterations=1,
|
||||
int borderType=BORDER_CONSTANT,
|
||||
const Scalar& borderValue=morphologyDefaultBorderValue() );
|
||||
CV_EXPORTS void dilate( const Mat& src, Mat& dst, const Mat& kernel,
|
||||
Point anchor=Point(-1,-1), int iterations=1,
|
||||
int borderType=BORDER_CONSTANT,
|
||||
const Scalar& borderValue=morphologyDefaultBorderValue() );
|
||||
CV_EXPORTS void morphologyEx( const Mat& src, Mat& dst, int op, const Mat& kernel,
|
||||
Point anchor=Point(-1,-1), int iterations=1,
|
||||
int borderType=BORDER_CONSTANT,
|
||||
const Scalar& borderValue=morphologyDefaultBorderValue() );
|
||||
|
||||
enum { INTER_NEAREST=0, INTER_LINEAR=1, INTER_CUBIC=2, INTER_AREA=3,
|
||||
INTER_LANCZOS4=4, INTER_MAX=7, WARP_INVERSE_MAP=16 };
|
||||
|
||||
CV_EXPORTS void resize( const Mat& src, Mat& dst,
|
||||
Size dsize, double fx=0, double fy=0,
|
||||
int interpolation=INTER_LINEAR );
|
||||
|
||||
CV_EXPORTS void warpAffine( const Mat& src, Mat& dst,
|
||||
const Mat& M, Size dsize,
|
||||
int flags=INTER_LINEAR,
|
||||
int borderMode=BORDER_CONSTANT,
|
||||
const Scalar& borderValue=Scalar());
|
||||
CV_EXPORTS void warpPerspective( const Mat& src, Mat& dst,
|
||||
const Mat& M, Size dsize,
|
||||
int flags=INTER_LINEAR,
|
||||
int borderMode=BORDER_CONSTANT,
|
||||
const Scalar& borderValue=Scalar());
|
||||
|
||||
enum { INTER_BITS=5, INTER_BITS2=INTER_BITS*2,
|
||||
INTER_TAB_SIZE=(1<<INTER_BITS),
|
||||
INTER_TAB_SIZE2=INTER_TAB_SIZE*INTER_TAB_SIZE };
|
||||
|
||||
CV_EXPORTS void remap( const Mat& src, Mat& dst, const Mat& map1, const Mat& map2,
|
||||
int interpolation, int borderMode=BORDER_CONSTANT,
|
||||
const Scalar& borderValue=Scalar());
|
||||
|
||||
CV_EXPORTS void convertMaps( const Mat& map1, const Mat& map2, Mat& dstmap1, Mat& dstmap2,
|
||||
int dstmap1type, bool nninterpolation=false );
|
||||
|
||||
CV_EXPORTS Mat getRotationMatrix2D( Point2f center, double angle, double scale );
|
||||
CV_EXPORTS Mat getPerspectiveTransform( const Point2f src[], const Point2f dst[] );
|
||||
CV_EXPORTS Mat getAffineTransform( const Point2f src[], const Point2f dst[] );
|
||||
CV_EXPORTS void invertAffineTransform(const Mat& M, Mat& iM);
|
||||
|
||||
CV_EXPORTS void getRectSubPix( const Mat& image, Size patchSize,
|
||||
Point2f center, Mat& patch, int patchType=-1 );
|
||||
|
||||
CV_EXPORTS void integral( const Mat& src, Mat& sum, int sdepth=-1 );
|
||||
CV_EXPORTS void integral( const Mat& src, Mat& sum, Mat& sqsum, int sdepth=-1 );
|
||||
CV_EXPORTS void integral( const Mat& src, Mat& sum, Mat& sqsum, Mat& tilted, int sdepth=-1 );
|
||||
|
||||
CV_EXPORTS void accumulate( const Mat& src, Mat& dst, const Mat& mask=Mat() );
|
||||
CV_EXPORTS void accumulateSquare( const Mat& src, Mat& dst, const Mat& mask=Mat() );
|
||||
CV_EXPORTS void accumulateProduct( const Mat& src1, const Mat& src2,
|
||||
Mat& dst, const Mat& mask=Mat() );
|
||||
CV_EXPORTS void accumulateWeighted( const Mat& src, Mat& dst,
|
||||
double alpha, const Mat& mask=Mat() );
|
||||
|
||||
enum { THRESH_BINARY=0, THRESH_BINARY_INV=1, THRESH_TRUNC=2, THRESH_TOZERO=3,
|
||||
THRESH_TOZERO_INV=4, THRESH_MASK=7, THRESH_OTSU=8 };
|
||||
|
||||
CV_EXPORTS double threshold( const Mat& src, Mat& dst, double thresh, double maxval, int type );
|
||||
|
||||
enum { ADAPTIVE_THRESH_MEAN_C=0, ADAPTIVE_THRESH_GAUSSIAN_C=1 };
|
||||
|
||||
CV_EXPORTS void adaptiveThreshold( const Mat& src, Mat& dst, double maxValue,
|
||||
int adaptiveMethod, int thresholdType,
|
||||
int blockSize, double C );
|
||||
|
||||
CV_EXPORTS void pyrDown( const Mat& src, Mat& dst, const Size& dstsize=Size());
|
||||
CV_EXPORTS void pyrUp( const Mat& src, Mat& dst, const Size& dstsize=Size());
|
||||
CV_EXPORTS void buildPyramid( const Mat& src, vector<Mat>& dst, int maxlevel );
|
||||
|
||||
|
||||
CV_EXPORTS void undistort( const Mat& src, Mat& dst, const Mat& cameraMatrix,
|
||||
const Mat& distCoeffs, const Mat& newCameraMatrix=Mat() );
|
||||
CV_EXPORTS void initUndistortRectifyMap( const Mat& cameraMatrix, const Mat& distCoeffs,
|
||||
const Mat& R, const Mat& newCameraMatrix,
|
||||
Size size, int m1type, Mat& map1, Mat& map2 );
|
||||
CV_EXPORTS Mat getOptimalNewCameraMatrix( const Mat& cameraMatrix, const Mat& distCoeffs,
|
||||
Size imageSize, double alpha, Size newImgSize=Size(),
|
||||
Rect* validPixROI=0);
|
||||
CV_EXPORTS Mat getDefaultNewCameraMatrix( const Mat& cameraMatrix, Size imgsize=Size(),
|
||||
bool centerPrincipalPoint=false );
|
||||
|
||||
|
||||
template<> CV_EXPORTS void Ptr<CvHistogram>::delete_obj();
|
||||
|
||||
CV_EXPORTS void calcHist( const Mat* images, int nimages,
|
||||
const int* channels, const Mat& mask,
|
||||
MatND& hist, int dims, const int* histSize,
|
||||
const float** ranges, bool uniform=true,
|
||||
bool accumulate=false );
|
||||
|
||||
CV_EXPORTS void calcHist( const Mat* images, int nimages,
|
||||
const int* channels, const Mat& mask,
|
||||
SparseMat& hist, int dims, const int* histSize,
|
||||
const float** ranges, bool uniform=true,
|
||||
bool accumulate=false );
|
||||
|
||||
CV_EXPORTS void calcBackProject( const Mat* images, int nimages,
|
||||
const int* channels, const MatND& hist,
|
||||
Mat& backProject, const float** ranges,
|
||||
double scale=1, bool uniform=true );
|
||||
|
||||
CV_EXPORTS void calcBackProject( const Mat* images, int nimages,
|
||||
const int* channels, const SparseMat& hist,
|
||||
Mat& backProject, const float** ranges,
|
||||
double scale=1, bool uniform=true );
|
||||
|
||||
CV_EXPORTS double compareHist( const MatND& H1, const MatND& H2, int method );
|
||||
|
||||
CV_EXPORTS double compareHist( const SparseMat& H1, const SparseMat& H2, int method );
|
||||
|
||||
CV_EXPORTS void equalizeHist( const Mat& src, Mat& dst );
|
||||
|
||||
CV_EXPORTS void watershed( const Mat& image, Mat& markers );
|
||||
|
||||
enum { GC_BGD = 0, // background
|
||||
GC_FGD = 1, // foreground
|
||||
GC_PR_BGD = 2, // most probably background
|
||||
GC_PR_FGD = 3 // most probably foreground
|
||||
};
|
||||
|
||||
enum { GC_INIT_WITH_RECT = 0,
|
||||
GC_INIT_WITH_MASK = 1,
|
||||
GC_EVAL = 2
|
||||
};
|
||||
|
||||
CV_EXPORTS void grabCut( const Mat& img, Mat& mask, Rect rect,
|
||||
Mat& bgdModel, Mat& fgdModel,
|
||||
int iterCount, int mode = GC_EVAL );
|
||||
|
||||
enum { INPAINT_NS=0, INPAINT_TELEA=1 };
|
||||
|
||||
CV_EXPORTS void inpaint( const Mat& src, const Mat& inpaintMask,
|
||||
Mat& dst, double inpaintRange, int flags );
|
||||
|
||||
CV_EXPORTS void distanceTransform( const Mat& src, Mat& dst, Mat& labels,
|
||||
int distanceType, int maskSize );
|
||||
|
||||
CV_EXPORTS void distanceTransform( const Mat& src, Mat& dst,
|
||||
int distanceType, int maskSize );
|
||||
|
||||
enum { FLOODFILL_FIXED_RANGE = 1 << 16,
|
||||
FLOODFILL_MASK_ONLY = 1 << 17 };
|
||||
|
||||
CV_EXPORTS int floodFill( Mat& image,
|
||||
Point seedPoint, Scalar newVal, Rect* rect=0,
|
||||
Scalar loDiff=Scalar(), Scalar upDiff=Scalar(),
|
||||
int flags=4 );
|
||||
|
||||
CV_EXPORTS int floodFill( Mat& image, Mat& mask,
|
||||
Point seedPoint, Scalar newVal, Rect* rect=0,
|
||||
Scalar loDiff=Scalar(), Scalar upDiff=Scalar(),
|
||||
int flags=4 );
|
||||
|
||||
CV_EXPORTS void cvtColor( const Mat& src, Mat& dst, int code, int dstCn=0 );
|
||||
|
||||
class CV_EXPORTS Moments
|
||||
{
|
||||
public:
|
||||
Moments();
|
||||
Moments(double m00, double m10, double m01, double m20, double m11,
|
||||
double m02, double m30, double m21, double m12, double m03 );
|
||||
Moments( const CvMoments& moments );
|
||||
operator CvMoments() const;
|
||||
|
||||
double m00, m10, m01, m20, m11, m02, m30, m21, m12, m03; // spatial moments
|
||||
double mu20, mu11, mu02, mu30, mu21, mu12, mu03; // central moments
|
||||
double nu20, nu11, nu02, nu30, nu21, nu12, nu03; // central normalized moments
|
||||
};
|
||||
|
||||
CV_EXPORTS Moments moments( const Mat& array, bool binaryImage=false );
|
||||
|
||||
CV_EXPORTS void HuMoments( const Moments& moments, double hu[7] );
|
||||
|
||||
enum { TM_SQDIFF=0, TM_SQDIFF_NORMED=1, TM_CCORR=2, TM_CCORR_NORMED=3, TM_CCOEFF=4, TM_CCOEFF_NORMED=5 };
|
||||
|
||||
CV_EXPORTS void matchTemplate( const Mat& image, const Mat& templ, Mat& result, int method );
|
||||
|
||||
enum { RETR_EXTERNAL=0, RETR_LIST=1, RETR_CCOMP=2, RETR_TREE=3 };
|
||||
|
||||
enum { CHAIN_APPROX_NONE=0, CHAIN_APPROX_SIMPLE=1,
|
||||
CHAIN_APPROX_TC89_L1=2, CHAIN_APPROX_TC89_KCOS=3 };
|
||||
|
||||
CV_EXPORTS void findContours( Mat& image, vector<vector<Point> >& contours,
|
||||
vector<Vec4i>& hierarchy, int mode,
|
||||
int method, Point offset=Point());
|
||||
|
||||
CV_EXPORTS void findContours( Mat& image, vector<vector<Point> >& contours,
|
||||
int mode, int method, Point offset=Point());
|
||||
|
||||
CV_EXPORTS void drawContours( Mat& image, const vector<vector<Point> >& contours,
|
||||
int contourIdx, const Scalar& color,
|
||||
int thickness=1, int lineType=8,
|
||||
const vector<Vec4i>& hierarchy=vector<Vec4i>(),
|
||||
int maxLevel=INT_MAX, Point offset=Point() );
|
||||
|
||||
CV_EXPORTS void approxPolyDP( const Mat& curve,
|
||||
vector<Point>& approxCurve,
|
||||
double epsilon, bool closed );
|
||||
CV_EXPORTS void approxPolyDP( const Mat& curve,
|
||||
vector<Point2f>& approxCurve,
|
||||
double epsilon, bool closed );
|
||||
|
||||
CV_EXPORTS double arcLength( const Mat& curve, bool closed );
|
||||
CV_EXPORTS Rect boundingRect( const Mat& points );
|
||||
CV_EXPORTS double contourArea( const Mat& contour, bool oriented=false );
|
||||
CV_EXPORTS RotatedRect minAreaRect( const Mat& points );
|
||||
CV_EXPORTS void minEnclosingCircle( const Mat& points,
|
||||
Point2f& center, float& radius );
|
||||
CV_EXPORTS double matchShapes( const Mat& contour1,
|
||||
const Mat& contour2,
|
||||
int method, double parameter );
|
||||
|
||||
CV_EXPORTS void convexHull( const Mat& points, vector<int>& hull, bool clockwise=false );
|
||||
CV_EXPORTS void convexHull( const Mat& points, vector<Point>& hull, bool clockwise=false );
|
||||
CV_EXPORTS void convexHull( const Mat& points, vector<Point2f>& hull, bool clockwise=false );
|
||||
|
||||
CV_EXPORTS bool isContourConvex( const Mat& contour );
|
||||
|
||||
CV_EXPORTS RotatedRect fitEllipse( const Mat& points );
|
||||
|
||||
CV_EXPORTS void fitLine( const Mat& points, Vec4f& line, int distType,
|
||||
double param, double reps, double aeps );
|
||||
CV_EXPORTS void fitLine( const Mat& points, Vec6f& line, int distType,
|
||||
double param, double reps, double aeps );
|
||||
|
||||
CV_EXPORTS double pointPolygonTest( const Mat& contour,
|
||||
Point2f pt, bool measureDist );
|
||||
|
||||
CV_EXPORTS Mat estimateRigidTransform( const Mat& A, const Mat& B,
|
||||
bool fullAffine );
|
||||
|
||||
CV_EXPORTS int estimateAffine3D(const Mat& from, const Mat& to, Mat& out,
|
||||
vector<uchar>& outliers,
|
||||
double param1 = 3.0, double param2 = 0.99);
|
||||
|
||||
}
|
||||
|
||||
|
||||
// 2009-01-12, Xavier Delacour <xavier.delacour@gmail.com>
|
||||
|
||||
struct lsh_hash {
|
||||
int h1, h2;
|
||||
};
|
||||
|
||||
struct CvLSHOperations
|
||||
{
|
||||
virtual ~CvLSHOperations() {}
|
||||
|
||||
virtual int vector_add(const void* data) = 0;
|
||||
virtual void vector_remove(int i) = 0;
|
||||
virtual const void* vector_lookup(int i) = 0;
|
||||
virtual void vector_reserve(int n) = 0;
|
||||
virtual unsigned int vector_count() = 0;
|
||||
|
||||
virtual void hash_insert(lsh_hash h, int l, int i) = 0;
|
||||
virtual void hash_remove(lsh_hash h, int l, int i) = 0;
|
||||
virtual int hash_lookup(lsh_hash h, int l, int* ret_i, int ret_i_max) = 0;
|
||||
};
|
||||
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif
|
||||
|
||||
/* End of file. */
|
759
modules/imgproc/include/opencv2/imgproc/imgproc_c.h
Normal file
759
modules/imgproc/include/opencv2/imgproc/imgproc_c.h
Normal file
@@ -0,0 +1,759 @@
|
||||
/*M///////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
|
||||
//
|
||||
// By downloading, copying, installing or using the software you agree to this license.
|
||||
// If you do not agree to this license, do not download, install,
|
||||
// copy or use the software.
|
||||
//
|
||||
//
|
||||
// License Agreement
|
||||
// For Open Source Computer Vision Library
|
||||
//
|
||||
// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
|
||||
// Copyright (C) 2009, Willow Garage Inc., all rights reserved.
|
||||
// Third party copyrights are property of their respective owners.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification,
|
||||
// are permitted provided that the following conditions are met:
|
||||
//
|
||||
// * Redistribution's of source code must retain the above copyright notice,
|
||||
// this list of conditions and the following disclaimer.
|
||||
//
|
||||
// * Redistribution's in binary form must reproduce the above copyright notice,
|
||||
// this list of conditions and the following disclaimer in the documentation
|
||||
// and/or other materials provided with the distribution.
|
||||
//
|
||||
// * The name of the copyright holders may not be used to endorse or promote products
|
||||
// derived from this software without specific prior written permission.
|
||||
//
|
||||
// This software is provided by the copyright holders and contributors "as is" and
|
||||
// any express or implied warranties, including, but not limited to, the implied
|
||||
// warranties of merchantability and fitness for a particular purpose are disclaimed.
|
||||
// In no event shall the Intel Corporation or contributors be liable for any direct,
|
||||
// indirect, incidental, special, exemplary, or consequential damages
|
||||
// (including, but not limited to, procurement of substitute goods or services;
|
||||
// loss of use, data, or profits; or business interruption) however caused
|
||||
// and on any theory of liability, whether in contract, strict liability,
|
||||
// or tort (including negligence or otherwise) arising in any way out of
|
||||
// the use of this software, even if advised of the possibility of such damage.
|
||||
//
|
||||
//M*/
|
||||
|
||||
#ifndef __OPENCV_IMGPROC_IMGPROC_C_H__
|
||||
#define __OPENCV_IMGPROC_IMGPROC_C_H__
|
||||
|
||||
#include "opencv2/core/core_c.h"
|
||||
#include "opencv2/imgproc/types_c.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*********************** Background statistics accumulation *****************************/
|
||||
|
||||
/* Adds image to accumulator */
|
||||
CVAPI(void) cvAcc( const CvArr* image, CvArr* sum,
|
||||
const CvArr* mask CV_DEFAULT(NULL) );
|
||||
|
||||
/* Adds squared image to accumulator */
|
||||
CVAPI(void) cvSquareAcc( const CvArr* image, CvArr* sqsum,
|
||||
const CvArr* mask CV_DEFAULT(NULL) );
|
||||
|
||||
/* Adds a product of two images to accumulator */
|
||||
CVAPI(void) cvMultiplyAcc( const CvArr* image1, const CvArr* image2, CvArr* acc,
|
||||
const CvArr* mask CV_DEFAULT(NULL) );
|
||||
|
||||
/* Adds image to accumulator with weights: acc = acc*(1-alpha) + image*alpha */
|
||||
CVAPI(void) cvRunningAvg( const CvArr* image, CvArr* acc, double alpha,
|
||||
const CvArr* mask CV_DEFAULT(NULL) );
|
||||
|
||||
/****************************************************************************************\
|
||||
* Image Processing *
|
||||
\****************************************************************************************/
|
||||
|
||||
/* Copies source 2D array inside of the larger destination array and
|
||||
makes a border of the specified type (IPL_BORDER_*) around the copied area. */
|
||||
CVAPI(void) cvCopyMakeBorder( const CvArr* src, CvArr* dst, CvPoint offset,
|
||||
int bordertype, CvScalar value CV_DEFAULT(cvScalarAll(0)));
|
||||
|
||||
/* Smoothes array (removes noise) */
|
||||
CVAPI(void) cvSmooth( const CvArr* src, CvArr* dst,
|
||||
int smoothtype CV_DEFAULT(CV_GAUSSIAN),
|
||||
int size1 CV_DEFAULT(3),
|
||||
int size2 CV_DEFAULT(0),
|
||||
double sigma1 CV_DEFAULT(0),
|
||||
double sigma2 CV_DEFAULT(0));
|
||||
|
||||
/* Convolves the image with the kernel */
|
||||
CVAPI(void) cvFilter2D( const CvArr* src, CvArr* dst, const CvMat* kernel,
|
||||
CvPoint anchor CV_DEFAULT(cvPoint(-1,-1)));
|
||||
|
||||
/* Finds integral image: SUM(X,Y) = sum(x<X,y<Y)I(x,y) */
|
||||
CVAPI(void) cvIntegral( const CvArr* image, CvArr* sum,
|
||||
CvArr* sqsum CV_DEFAULT(NULL),
|
||||
CvArr* tilted_sum CV_DEFAULT(NULL));
|
||||
|
||||
/*
|
||||
Smoothes the input image with gaussian kernel and then down-samples it.
|
||||
dst_width = floor(src_width/2)[+1],
|
||||
dst_height = floor(src_height/2)[+1]
|
||||
*/
|
||||
CVAPI(void) cvPyrDown( const CvArr* src, CvArr* dst,
|
||||
int filter CV_DEFAULT(CV_GAUSSIAN_5x5) );
|
||||
|
||||
/*
|
||||
Up-samples image and smoothes the result with gaussian kernel.
|
||||
dst_width = src_width*2,
|
||||
dst_height = src_height*2
|
||||
*/
|
||||
CVAPI(void) cvPyrUp( const CvArr* src, CvArr* dst,
|
||||
int filter CV_DEFAULT(CV_GAUSSIAN_5x5) );
|
||||
|
||||
/* Builds pyramid for an image */
|
||||
CVAPI(CvMat**) cvCreatePyramid( const CvArr* img, int extra_layers, double rate,
|
||||
const CvSize* layer_sizes CV_DEFAULT(0),
|
||||
CvArr* bufarr CV_DEFAULT(0),
|
||||
int calc CV_DEFAULT(1),
|
||||
int filter CV_DEFAULT(CV_GAUSSIAN_5x5) );
|
||||
|
||||
/* Releases pyramid */
|
||||
CVAPI(void) cvReleasePyramid( CvMat*** pyramid, int extra_layers );
|
||||
|
||||
|
||||
/* Splits color or grayscale image into multiple connected components
|
||||
of nearly the same color/brightness using modification of Burt algorithm.
|
||||
comp with contain a pointer to sequence (CvSeq)
|
||||
of connected components (CvConnectedComp) */
|
||||
CVAPI(void) cvPyrSegmentation( IplImage* src, IplImage* dst,
|
||||
CvMemStorage* storage, CvSeq** comp,
|
||||
int level, double threshold1,
|
||||
double threshold2 );
|
||||
|
||||
/* Filters image using meanshift algorithm */
|
||||
CVAPI(void) cvPyrMeanShiftFiltering( const CvArr* src, CvArr* dst,
|
||||
double sp, double sr, int max_level CV_DEFAULT(1),
|
||||
CvTermCriteria termcrit CV_DEFAULT(cvTermCriteria(CV_TERMCRIT_ITER+CV_TERMCRIT_EPS,5,1)));
|
||||
|
||||
/* Segments image using seed "markers" */
|
||||
CVAPI(void) cvWatershed( const CvArr* image, CvArr* markers );
|
||||
|
||||
/* Inpaints the selected region in the image */
|
||||
CVAPI(void) cvInpaint( const CvArr* src, const CvArr* inpaint_mask,
|
||||
CvArr* dst, double inpaintRange, int flags );
|
||||
|
||||
/* Calculates an image derivative using generalized Sobel
|
||||
(aperture_size = 1,3,5,7) or Scharr (aperture_size = -1) operator.
|
||||
Scharr can be used only for the first dx or dy derivative */
|
||||
CVAPI(void) cvSobel( const CvArr* src, CvArr* dst,
|
||||
int xorder, int yorder,
|
||||
int aperture_size CV_DEFAULT(3));
|
||||
|
||||
/* Calculates the image Laplacian: (d2/dx + d2/dy)I */
|
||||
CVAPI(void) cvLaplace( const CvArr* src, CvArr* dst,
|
||||
int aperture_size CV_DEFAULT(3) );
|
||||
|
||||
/* Converts input array pixels from one color space to another */
|
||||
CVAPI(void) cvCvtColor( const CvArr* src, CvArr* dst, int code );
|
||||
|
||||
|
||||
/* Resizes image (input array is resized to fit the destination array) */
|
||||
CVAPI(void) cvResize( const CvArr* src, CvArr* dst,
|
||||
int interpolation CV_DEFAULT( CV_INTER_LINEAR ));
|
||||
|
||||
/* Warps image with affine transform */
|
||||
CVAPI(void) cvWarpAffine( const CvArr* src, CvArr* dst, const CvMat* map_matrix,
|
||||
int flags CV_DEFAULT(CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS),
|
||||
CvScalar fillval CV_DEFAULT(cvScalarAll(0)) );
|
||||
|
||||
/* Computes affine transform matrix for mapping src[i] to dst[i] (i=0,1,2) */
|
||||
CVAPI(CvMat*) cvGetAffineTransform( const CvPoint2D32f * src,
|
||||
const CvPoint2D32f * dst,
|
||||
CvMat * map_matrix );
|
||||
|
||||
/* Computes rotation_matrix matrix */
|
||||
CVAPI(CvMat*) cv2DRotationMatrix( CvPoint2D32f center, double angle,
|
||||
double scale, CvMat* map_matrix );
|
||||
|
||||
/* Warps image with perspective (projective) transform */
|
||||
CVAPI(void) cvWarpPerspective( const CvArr* src, CvArr* dst, const CvMat* map_matrix,
|
||||
int flags CV_DEFAULT(CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS),
|
||||
CvScalar fillval CV_DEFAULT(cvScalarAll(0)) );
|
||||
|
||||
/* Computes perspective transform matrix for mapping src[i] to dst[i] (i=0,1,2,3) */
|
||||
CVAPI(CvMat*) cvGetPerspectiveTransform( const CvPoint2D32f* src,
|
||||
const CvPoint2D32f* dst,
|
||||
CvMat* map_matrix );
|
||||
|
||||
/* Performs generic geometric transformation using the specified coordinate maps */
|
||||
CVAPI(void) cvRemap( const CvArr* src, CvArr* dst,
|
||||
const CvArr* mapx, const CvArr* mapy,
|
||||
int flags CV_DEFAULT(CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS),
|
||||
CvScalar fillval CV_DEFAULT(cvScalarAll(0)) );
|
||||
|
||||
/* Converts mapx & mapy from floating-point to integer formats for cvRemap */
|
||||
CVAPI(void) cvConvertMaps( const CvArr* mapx, const CvArr* mapy,
|
||||
CvArr* mapxy, CvArr* mapalpha );
|
||||
|
||||
/* Performs forward or inverse log-polar image transform */
|
||||
CVAPI(void) cvLogPolar( const CvArr* src, CvArr* dst,
|
||||
CvPoint2D32f center, double M,
|
||||
int flags CV_DEFAULT(CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS));
|
||||
|
||||
/* Performs forward or inverse linear-polar image transform */
|
||||
CVAPI(void) cvLinearPolar( const CvArr* src, CvArr* dst,
|
||||
CvPoint2D32f center, double maxRadius,
|
||||
int flags CV_DEFAULT(CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS));
|
||||
|
||||
/* creates structuring element used for morphological operations */
|
||||
CVAPI(IplConvKernel*) cvCreateStructuringElementEx(
|
||||
int cols, int rows, int anchor_x, int anchor_y,
|
||||
int shape, int* values CV_DEFAULT(NULL) );
|
||||
|
||||
/* releases structuring element */
|
||||
CVAPI(void) cvReleaseStructuringElement( IplConvKernel** element );
|
||||
|
||||
/* erodes input image (applies minimum filter) one or more times.
|
||||
If element pointer is NULL, 3x3 rectangular element is used */
|
||||
CVAPI(void) cvErode( const CvArr* src, CvArr* dst,
|
||||
IplConvKernel* element CV_DEFAULT(NULL),
|
||||
int iterations CV_DEFAULT(1) );
|
||||
|
||||
/* dilates input image (applies maximum filter) one or more times.
|
||||
If element pointer is NULL, 3x3 rectangular element is used */
|
||||
CVAPI(void) cvDilate( const CvArr* src, CvArr* dst,
|
||||
IplConvKernel* element CV_DEFAULT(NULL),
|
||||
int iterations CV_DEFAULT(1) );
|
||||
|
||||
/* Performs complex morphological transformation */
|
||||
CVAPI(void) cvMorphologyEx( const CvArr* src, CvArr* dst,
|
||||
CvArr* temp, IplConvKernel* element,
|
||||
int operation, int iterations CV_DEFAULT(1) );
|
||||
|
||||
/* Calculates all spatial and central moments up to the 3rd order */
|
||||
CVAPI(void) cvMoments( const CvArr* arr, CvMoments* moments, int binary CV_DEFAULT(0));
|
||||
|
||||
/* Retrieve particular spatial, central or normalized central moments */
|
||||
CVAPI(double) cvGetSpatialMoment( CvMoments* moments, int x_order, int y_order );
|
||||
CVAPI(double) cvGetCentralMoment( CvMoments* moments, int x_order, int y_order );
|
||||
CVAPI(double) cvGetNormalizedCentralMoment( CvMoments* moments,
|
||||
int x_order, int y_order );
|
||||
|
||||
/* Calculates 7 Hu's invariants from precalculated spatial and central moments */
|
||||
CVAPI(void) cvGetHuMoments( CvMoments* moments, CvHuMoments* hu_moments );
|
||||
|
||||
/*********************************** data sampling **************************************/
|
||||
|
||||
/* Fetches pixels that belong to the specified line segment and stores them to the buffer.
|
||||
Returns the number of retrieved points. */
|
||||
CVAPI(int) cvSampleLine( const CvArr* image, CvPoint pt1, CvPoint pt2, void* buffer,
|
||||
int connectivity CV_DEFAULT(8));
|
||||
|
||||
/* Retrieves the rectangular image region with specified center from the input array.
|
||||
dst(x,y) <- src(x + center.x - dst_width/2, y + center.y - dst_height/2).
|
||||
Values of pixels with fractional coordinates are retrieved using bilinear interpolation*/
|
||||
CVAPI(void) cvGetRectSubPix( const CvArr* src, CvArr* dst, CvPoint2D32f center );
|
||||
|
||||
|
||||
/* Retrieves quadrangle from the input array.
|
||||
matrixarr = ( a11 a12 | b1 ) dst(x,y) <- src(A[x y]' + b)
|
||||
( a21 a22 | b2 ) (bilinear interpolation is used to retrieve pixels
|
||||
with fractional coordinates)
|
||||
*/
|
||||
CVAPI(void) cvGetQuadrangleSubPix( const CvArr* src, CvArr* dst,
|
||||
const CvMat* map_matrix );
|
||||
|
||||
/* Measures similarity between template and overlapped windows in the source image
|
||||
and fills the resultant image with the measurements */
|
||||
CVAPI(void) cvMatchTemplate( const CvArr* image, const CvArr* templ,
|
||||
CvArr* result, int method );
|
||||
|
||||
/* Computes earth mover distance between
|
||||
two weighted point sets (called signatures) */
|
||||
CVAPI(float) cvCalcEMD2( const CvArr* signature1,
|
||||
const CvArr* signature2,
|
||||
int distance_type,
|
||||
CvDistanceFunction distance_func CV_DEFAULT(NULL),
|
||||
const CvArr* cost_matrix CV_DEFAULT(NULL),
|
||||
CvArr* flow CV_DEFAULT(NULL),
|
||||
float* lower_bound CV_DEFAULT(NULL),
|
||||
void* userdata CV_DEFAULT(NULL));
|
||||
|
||||
/****************************************************************************************\
|
||||
* Contours retrieving *
|
||||
\****************************************************************************************/
|
||||
|
||||
/* Retrieves outer and optionally inner boundaries of white (non-zero) connected
|
||||
components in the black (zero) background */
|
||||
CVAPI(int) cvFindContours( CvArr* image, CvMemStorage* storage, CvSeq** first_contour,
|
||||
int header_size CV_DEFAULT(sizeof(CvContour)),
|
||||
int mode CV_DEFAULT(CV_RETR_LIST),
|
||||
int method CV_DEFAULT(CV_CHAIN_APPROX_SIMPLE),
|
||||
CvPoint offset CV_DEFAULT(cvPoint(0,0)));
|
||||
|
||||
/* Initalizes contour retrieving process.
|
||||
Calls cvStartFindContours.
|
||||
Calls cvFindNextContour until null pointer is returned
|
||||
or some other condition becomes true.
|
||||
Calls cvEndFindContours at the end. */
|
||||
CVAPI(CvContourScanner) cvStartFindContours( CvArr* image, CvMemStorage* storage,
|
||||
int header_size CV_DEFAULT(sizeof(CvContour)),
|
||||
int mode CV_DEFAULT(CV_RETR_LIST),
|
||||
int method CV_DEFAULT(CV_CHAIN_APPROX_SIMPLE),
|
||||
CvPoint offset CV_DEFAULT(cvPoint(0,0)));
|
||||
|
||||
/* Retrieves next contour */
|
||||
CVAPI(CvSeq*) cvFindNextContour( CvContourScanner scanner );
|
||||
|
||||
|
||||
/* Substitutes the last retrieved contour with the new one
|
||||
(if the substitutor is null, the last retrieved contour is removed from the tree) */
|
||||
CVAPI(void) cvSubstituteContour( CvContourScanner scanner, CvSeq* new_contour );
|
||||
|
||||
|
||||
/* Releases contour scanner and returns pointer to the first outer contour */
|
||||
CVAPI(CvSeq*) cvEndFindContours( CvContourScanner* scanner );
|
||||
|
||||
/* Approximates a single Freeman chain or a tree of chains to polygonal curves */
|
||||
CVAPI(CvSeq*) cvApproxChains( CvSeq* src_seq, CvMemStorage* storage,
|
||||
int method CV_DEFAULT(CV_CHAIN_APPROX_SIMPLE),
|
||||
double parameter CV_DEFAULT(0),
|
||||
int minimal_perimeter CV_DEFAULT(0),
|
||||
int recursive CV_DEFAULT(0));
|
||||
|
||||
/* Initalizes Freeman chain reader.
|
||||
The reader is used to iteratively get coordinates of all the chain points.
|
||||
If the Freeman codes should be read as is, a simple sequence reader should be used */
|
||||
CVAPI(void) cvStartReadChainPoints( CvChain* chain, CvChainPtReader* reader );
|
||||
|
||||
/* Retrieves the next chain point */
|
||||
CVAPI(CvPoint) cvReadChainPoint( CvChainPtReader* reader );
|
||||
|
||||
/****************************************************************************************\
|
||||
* Planar subdivisions *
|
||||
\****************************************************************************************/
|
||||
|
||||
/* Initializes Delaunay triangulation */
|
||||
CVAPI(void) cvInitSubdivDelaunay2D( CvSubdiv2D* subdiv, CvRect rect );
|
||||
|
||||
/* Creates new subdivision */
|
||||
CVAPI(CvSubdiv2D*) cvCreateSubdiv2D( int subdiv_type, int header_size,
|
||||
int vtx_size, int quadedge_size,
|
||||
CvMemStorage* storage );
|
||||
|
||||
/************************* high-level subdivision functions ***************************/
|
||||
|
||||
/* Simplified Delaunay diagram creation */
|
||||
CV_INLINE CvSubdiv2D* cvCreateSubdivDelaunay2D( CvRect rect, CvMemStorage* storage )
|
||||
{
|
||||
CvSubdiv2D* subdiv = cvCreateSubdiv2D( CV_SEQ_KIND_SUBDIV2D, sizeof(*subdiv),
|
||||
sizeof(CvSubdiv2DPoint), sizeof(CvQuadEdge2D), storage );
|
||||
|
||||
cvInitSubdivDelaunay2D( subdiv, rect );
|
||||
return subdiv;
|
||||
}
|
||||
|
||||
|
||||
/* Inserts new point to the Delaunay triangulation */
|
||||
CVAPI(CvSubdiv2DPoint*) cvSubdivDelaunay2DInsert( CvSubdiv2D* subdiv, CvPoint2D32f pt);
|
||||
|
||||
/* Locates a point within the Delaunay triangulation (finds the edge
|
||||
the point is left to or belongs to, or the triangulation point the given
|
||||
point coinsides with */
|
||||
CVAPI(CvSubdiv2DPointLocation) cvSubdiv2DLocate(
|
||||
CvSubdiv2D* subdiv, CvPoint2D32f pt,
|
||||
CvSubdiv2DEdge* edge,
|
||||
CvSubdiv2DPoint** vertex CV_DEFAULT(NULL) );
|
||||
|
||||
/* Calculates Voronoi tesselation (i.e. coordinates of Voronoi points) */
|
||||
CVAPI(void) cvCalcSubdivVoronoi2D( CvSubdiv2D* subdiv );
|
||||
|
||||
|
||||
/* Removes all Voronoi points from the tesselation */
|
||||
CVAPI(void) cvClearSubdivVoronoi2D( CvSubdiv2D* subdiv );
|
||||
|
||||
|
||||
/* Finds the nearest to the given point vertex in subdivision. */
|
||||
CVAPI(CvSubdiv2DPoint*) cvFindNearestPoint2D( CvSubdiv2D* subdiv, CvPoint2D32f pt );
|
||||
|
||||
|
||||
/************ Basic quad-edge navigation and operations ************/
|
||||
|
||||
CV_INLINE CvSubdiv2DEdge cvSubdiv2DNextEdge( CvSubdiv2DEdge edge )
|
||||
{
|
||||
return CV_SUBDIV2D_NEXT_EDGE(edge);
|
||||
}
|
||||
|
||||
|
||||
CV_INLINE CvSubdiv2DEdge cvSubdiv2DRotateEdge( CvSubdiv2DEdge edge, int rotate )
|
||||
{
|
||||
return (edge & ~3) + ((edge + rotate) & 3);
|
||||
}
|
||||
|
||||
CV_INLINE CvSubdiv2DEdge cvSubdiv2DSymEdge( CvSubdiv2DEdge edge )
|
||||
{
|
||||
return edge ^ 2;
|
||||
}
|
||||
|
||||
CV_INLINE CvSubdiv2DEdge cvSubdiv2DGetEdge( CvSubdiv2DEdge edge, CvNextEdgeType type )
|
||||
{
|
||||
CvQuadEdge2D* e = (CvQuadEdge2D*)(edge & ~3);
|
||||
edge = e->next[(edge + (int)type) & 3];
|
||||
return (edge & ~3) + ((edge + ((int)type >> 4)) & 3);
|
||||
}
|
||||
|
||||
|
||||
CV_INLINE CvSubdiv2DPoint* cvSubdiv2DEdgeOrg( CvSubdiv2DEdge edge )
|
||||
{
|
||||
CvQuadEdge2D* e = (CvQuadEdge2D*)(edge & ~3);
|
||||
return (CvSubdiv2DPoint*)e->pt[edge & 3];
|
||||
}
|
||||
|
||||
|
||||
CV_INLINE CvSubdiv2DPoint* cvSubdiv2DEdgeDst( CvSubdiv2DEdge edge )
|
||||
{
|
||||
CvQuadEdge2D* e = (CvQuadEdge2D*)(edge & ~3);
|
||||
return (CvSubdiv2DPoint*)e->pt[(edge + 2) & 3];
|
||||
}
|
||||
|
||||
|
||||
CV_INLINE double cvTriangleArea( CvPoint2D32f a, CvPoint2D32f b, CvPoint2D32f c )
|
||||
{
|
||||
return (b.x - a.x) * (c.y - a.y) - (b.y - a.y) * (c.x - a.x);
|
||||
}
|
||||
|
||||
|
||||
/****************************************************************************************\
|
||||
* Contour Processing and Shape Analysis *
|
||||
\****************************************************************************************/
|
||||
|
||||
/* Approximates a single polygonal curve (contour) or
|
||||
a tree of polygonal curves (contours) */
|
||||
CVAPI(CvSeq*) cvApproxPoly( const void* src_seq,
|
||||
int header_size, CvMemStorage* storage,
|
||||
int method, double parameter,
|
||||
int parameter2 CV_DEFAULT(0));
|
||||
|
||||
/* Calculates perimeter of a contour or length of a part of contour */
|
||||
CVAPI(double) cvArcLength( const void* curve,
|
||||
CvSlice slice CV_DEFAULT(CV_WHOLE_SEQ),
|
||||
int is_closed CV_DEFAULT(-1));
|
||||
|
||||
CV_INLINE double cvContourPerimeter( const void* contour )
|
||||
{
|
||||
return cvArcLength( contour, CV_WHOLE_SEQ, 1 );
|
||||
}
|
||||
|
||||
|
||||
/* Calculates contour boundning rectangle (update=1) or
|
||||
just retrieves pre-calculated rectangle (update=0) */
|
||||
CVAPI(CvRect) cvBoundingRect( CvArr* points, int update CV_DEFAULT(0) );
|
||||
|
||||
/* Calculates area of a contour or contour segment */
|
||||
CVAPI(double) cvContourArea( const CvArr* contour,
|
||||
CvSlice slice CV_DEFAULT(CV_WHOLE_SEQ),
|
||||
int oriented CV_DEFAULT(0));
|
||||
|
||||
/* Finds minimum area rotated rectangle bounding a set of points */
|
||||
CVAPI(CvBox2D) cvMinAreaRect2( const CvArr* points,
|
||||
CvMemStorage* storage CV_DEFAULT(NULL));
|
||||
|
||||
/* Finds minimum enclosing circle for a set of points */
|
||||
CVAPI(int) cvMinEnclosingCircle( const CvArr* points,
|
||||
CvPoint2D32f* center, float* radius );
|
||||
|
||||
/* Compares two contours by matching their moments */
|
||||
CVAPI(double) cvMatchShapes( const void* object1, const void* object2,
|
||||
int method, double parameter CV_DEFAULT(0));
|
||||
|
||||
/* Calculates exact convex hull of 2d point set */
|
||||
CVAPI(CvSeq*) cvConvexHull2( const CvArr* input,
|
||||
void* hull_storage CV_DEFAULT(NULL),
|
||||
int orientation CV_DEFAULT(CV_CLOCKWISE),
|
||||
int return_points CV_DEFAULT(0));
|
||||
|
||||
/* Checks whether the contour is convex or not (returns 1 if convex, 0 if not) */
|
||||
CVAPI(int) cvCheckContourConvexity( const CvArr* contour );
|
||||
|
||||
|
||||
/* Finds convexity defects for the contour */
|
||||
CVAPI(CvSeq*) cvConvexityDefects( const CvArr* contour, const CvArr* convexhull,
|
||||
CvMemStorage* storage CV_DEFAULT(NULL));
|
||||
|
||||
/* Fits ellipse into a set of 2d points */
|
||||
CVAPI(CvBox2D) cvFitEllipse2( const CvArr* points );
|
||||
|
||||
/* Finds minimum rectangle containing two given rectangles */
|
||||
CVAPI(CvRect) cvMaxRect( const CvRect* rect1, const CvRect* rect2 );
|
||||
|
||||
/* Finds coordinates of the box vertices */
|
||||
CVAPI(void) cvBoxPoints( CvBox2D box, CvPoint2D32f pt[4] );
|
||||
|
||||
/* Initializes sequence header for a matrix (column or row vector) of points -
|
||||
a wrapper for cvMakeSeqHeaderForArray (it does not initialize bounding rectangle!!!) */
|
||||
CVAPI(CvSeq*) cvPointSeqFromMat( int seq_kind, const CvArr* mat,
|
||||
CvContour* contour_header,
|
||||
CvSeqBlock* block );
|
||||
|
||||
/* Checks whether the point is inside polygon, outside, on an edge (at a vertex).
|
||||
Returns positive, negative or zero value, correspondingly.
|
||||
Optionally, measures a signed distance between
|
||||
the point and the nearest polygon edge (measure_dist=1) */
|
||||
CVAPI(double) cvPointPolygonTest( const CvArr* contour,
|
||||
CvPoint2D32f pt, int measure_dist );
|
||||
|
||||
/****************************************************************************************\
|
||||
* Histogram functions *
|
||||
\****************************************************************************************/
|
||||
|
||||
/* Creates new histogram */
|
||||
CVAPI(CvHistogram*) cvCreateHist( int dims, int* sizes, int type,
|
||||
float** ranges CV_DEFAULT(NULL),
|
||||
int uniform CV_DEFAULT(1));
|
||||
|
||||
/* Assignes histogram bin ranges */
|
||||
CVAPI(void) cvSetHistBinRanges( CvHistogram* hist, float** ranges,
|
||||
int uniform CV_DEFAULT(1));
|
||||
|
||||
/* Creates histogram header for array */
|
||||
CVAPI(CvHistogram*) cvMakeHistHeaderForArray(
|
||||
int dims, int* sizes, CvHistogram* hist,
|
||||
float* data, float** ranges CV_DEFAULT(NULL),
|
||||
int uniform CV_DEFAULT(1));
|
||||
|
||||
/* Releases histogram */
|
||||
CVAPI(void) cvReleaseHist( CvHistogram** hist );
|
||||
|
||||
/* Clears all the histogram bins */
|
||||
CVAPI(void) cvClearHist( CvHistogram* hist );
|
||||
|
||||
/* Finds indices and values of minimum and maximum histogram bins */
|
||||
CVAPI(void) cvGetMinMaxHistValue( const CvHistogram* hist,
|
||||
float* min_value, float* max_value,
|
||||
int* min_idx CV_DEFAULT(NULL),
|
||||
int* max_idx CV_DEFAULT(NULL));
|
||||
|
||||
|
||||
/* Normalizes histogram by dividing all bins by sum of the bins, multiplied by <factor>.
|
||||
After that sum of histogram bins is equal to <factor> */
|
||||
CVAPI(void) cvNormalizeHist( CvHistogram* hist, double factor );
|
||||
|
||||
|
||||
/* Clear all histogram bins that are below the threshold */
|
||||
CVAPI(void) cvThreshHist( CvHistogram* hist, double threshold );
|
||||
|
||||
|
||||
/* Compares two histogram */
|
||||
CVAPI(double) cvCompareHist( const CvHistogram* hist1,
|
||||
const CvHistogram* hist2,
|
||||
int method);
|
||||
|
||||
/* Copies one histogram to another. Destination histogram is created if
|
||||
the destination pointer is NULL */
|
||||
CVAPI(void) cvCopyHist( const CvHistogram* src, CvHistogram** dst );
|
||||
|
||||
|
||||
/* Calculates bayesian probabilistic histograms
|
||||
(each or src and dst is an array of <number> histograms */
|
||||
CVAPI(void) cvCalcBayesianProb( CvHistogram** src, int number,
|
||||
CvHistogram** dst);
|
||||
|
||||
/* Calculates array histogram */
|
||||
CVAPI(void) cvCalcArrHist( CvArr** arr, CvHistogram* hist,
|
||||
int accumulate CV_DEFAULT(0),
|
||||
const CvArr* mask CV_DEFAULT(NULL) );
|
||||
|
||||
CV_INLINE void cvCalcHist( IplImage** image, CvHistogram* hist,
|
||||
int accumulate CV_DEFAULT(0),
|
||||
const CvArr* mask CV_DEFAULT(NULL) )
|
||||
{
|
||||
cvCalcArrHist( (CvArr**)image, hist, accumulate, mask );
|
||||
}
|
||||
|
||||
/* Calculates back project */
|
||||
CVAPI(void) cvCalcArrBackProject( CvArr** image, CvArr* dst,
|
||||
const CvHistogram* hist );
|
||||
#define cvCalcBackProject(image, dst, hist) cvCalcArrBackProject((CvArr**)image, dst, hist)
|
||||
|
||||
|
||||
/* Does some sort of template matching but compares histograms of
|
||||
template and each window location */
|
||||
CVAPI(void) cvCalcArrBackProjectPatch( CvArr** image, CvArr* dst, CvSize range,
|
||||
CvHistogram* hist, int method,
|
||||
double factor );
|
||||
#define cvCalcBackProjectPatch( image, dst, range, hist, method, factor ) \
|
||||
cvCalcArrBackProjectPatch( (CvArr**)image, dst, range, hist, method, factor )
|
||||
|
||||
|
||||
/* calculates probabilistic density (divides one histogram by another) */
|
||||
CVAPI(void) cvCalcProbDensity( const CvHistogram* hist1, const CvHistogram* hist2,
|
||||
CvHistogram* dst_hist, double scale CV_DEFAULT(255) );
|
||||
|
||||
/* equalizes histogram of 8-bit single-channel image */
|
||||
CVAPI(void) cvEqualizeHist( const CvArr* src, CvArr* dst );
|
||||
|
||||
|
||||
/* Applies distance transform to binary image */
|
||||
CVAPI(void) cvDistTransform( const CvArr* src, CvArr* dst,
|
||||
int distance_type CV_DEFAULT(CV_DIST_L2),
|
||||
int mask_size CV_DEFAULT(3),
|
||||
const float* mask CV_DEFAULT(NULL),
|
||||
CvArr* labels CV_DEFAULT(NULL));
|
||||
|
||||
|
||||
/* Applies fixed-level threshold to grayscale image.
|
||||
This is a basic operation applied before retrieving contours */
|
||||
CVAPI(double) cvThreshold( const CvArr* src, CvArr* dst,
|
||||
double threshold, double max_value,
|
||||
int threshold_type );
|
||||
|
||||
/* Applies adaptive threshold to grayscale image.
|
||||
The two parameters for methods CV_ADAPTIVE_THRESH_MEAN_C and
|
||||
CV_ADAPTIVE_THRESH_GAUSSIAN_C are:
|
||||
neighborhood size (3, 5, 7 etc.),
|
||||
and a constant subtracted from mean (...,-3,-2,-1,0,1,2,3,...) */
|
||||
CVAPI(void) cvAdaptiveThreshold( const CvArr* src, CvArr* dst, double max_value,
|
||||
int adaptive_method CV_DEFAULT(CV_ADAPTIVE_THRESH_MEAN_C),
|
||||
int threshold_type CV_DEFAULT(CV_THRESH_BINARY),
|
||||
int block_size CV_DEFAULT(3),
|
||||
double param1 CV_DEFAULT(5));
|
||||
|
||||
/* Fills the connected component until the color difference gets large enough */
|
||||
CVAPI(void) cvFloodFill( CvArr* image, CvPoint seed_point,
|
||||
CvScalar new_val, CvScalar lo_diff CV_DEFAULT(cvScalarAll(0)),
|
||||
CvScalar up_diff CV_DEFAULT(cvScalarAll(0)),
|
||||
CvConnectedComp* comp CV_DEFAULT(NULL),
|
||||
int flags CV_DEFAULT(4),
|
||||
CvArr* mask CV_DEFAULT(NULL));
|
||||
|
||||
/****************************************************************************************\
|
||||
* Feature detection *
|
||||
\****************************************************************************************/
|
||||
|
||||
/* Runs canny edge detector */
|
||||
CVAPI(void) cvCanny( const CvArr* image, CvArr* edges, double threshold1,
|
||||
double threshold2, int aperture_size CV_DEFAULT(3) );
|
||||
|
||||
/* Calculates constraint image for corner detection
|
||||
Dx^2 * Dyy + Dxx * Dy^2 - 2 * Dx * Dy * Dxy.
|
||||
Applying threshold to the result gives coordinates of corners */
|
||||
CVAPI(void) cvPreCornerDetect( const CvArr* image, CvArr* corners,
|
||||
int aperture_size CV_DEFAULT(3) );
|
||||
|
||||
/* Calculates eigen values and vectors of 2x2
|
||||
gradient covariation matrix at every image pixel */
|
||||
CVAPI(void) cvCornerEigenValsAndVecs( const CvArr* image, CvArr* eigenvv,
|
||||
int block_size, int aperture_size CV_DEFAULT(3) );
|
||||
|
||||
/* Calculates minimal eigenvalue for 2x2 gradient covariation matrix at
|
||||
every image pixel */
|
||||
CVAPI(void) cvCornerMinEigenVal( const CvArr* image, CvArr* eigenval,
|
||||
int block_size, int aperture_size CV_DEFAULT(3) );
|
||||
|
||||
/* Harris corner detector:
|
||||
Calculates det(M) - k*(trace(M)^2), where M is 2x2 gradient covariation matrix for each pixel */
|
||||
CVAPI(void) cvCornerHarris( const CvArr* image, CvArr* harris_responce,
|
||||
int block_size, int aperture_size CV_DEFAULT(3),
|
||||
double k CV_DEFAULT(0.04) );
|
||||
|
||||
/* Adjust corner position using some sort of gradient search */
|
||||
CVAPI(void) cvFindCornerSubPix( const CvArr* image, CvPoint2D32f* corners,
|
||||
int count, CvSize win, CvSize zero_zone,
|
||||
CvTermCriteria criteria );
|
||||
|
||||
/* Finds a sparse set of points within the selected region
|
||||
that seem to be easy to track */
|
||||
CVAPI(void) cvGoodFeaturesToTrack( const CvArr* image, CvArr* eig_image,
|
||||
CvArr* temp_image, CvPoint2D32f* corners,
|
||||
int* corner_count, double quality_level,
|
||||
double min_distance,
|
||||
const CvArr* mask CV_DEFAULT(NULL),
|
||||
int block_size CV_DEFAULT(3),
|
||||
int use_harris CV_DEFAULT(0),
|
||||
double k CV_DEFAULT(0.04) );
|
||||
|
||||
/* Finds lines on binary image using one of several methods.
|
||||
line_storage is either memory storage or 1 x <max number of lines> CvMat, its
|
||||
number of columns is changed by the function.
|
||||
method is one of CV_HOUGH_*;
|
||||
rho, theta and threshold are used for each of those methods;
|
||||
param1 ~ line length, param2 ~ line gap - for probabilistic,
|
||||
param1 ~ srn, param2 ~ stn - for multi-scale */
|
||||
CVAPI(CvSeq*) cvHoughLines2( CvArr* image, void* line_storage, int method,
|
||||
double rho, double theta, int threshold,
|
||||
double param1 CV_DEFAULT(0), double param2 CV_DEFAULT(0));
|
||||
|
||||
/* Finds circles in the image */
|
||||
CVAPI(CvSeq*) cvHoughCircles( CvArr* image, void* circle_storage,
|
||||
int method, double dp, double min_dist,
|
||||
double param1 CV_DEFAULT(100),
|
||||
double param2 CV_DEFAULT(100),
|
||||
int min_radius CV_DEFAULT(0),
|
||||
int max_radius CV_DEFAULT(0));
|
||||
|
||||
/* Fits a line into set of 2d or 3d points in a robust way (M-estimator technique) */
|
||||
CVAPI(void) cvFitLine( const CvArr* points, int dist_type, double param,
|
||||
double reps, double aeps, float* line );
|
||||
|
||||
|
||||
/* Constructs kd-tree from set of feature descriptors */
|
||||
CVAPI(struct CvFeatureTree*) cvCreateKDTree(CvMat* desc);
|
||||
|
||||
/* Constructs spill-tree from set of feature descriptors */
|
||||
CVAPI(struct CvFeatureTree*) cvCreateSpillTree( const CvMat* raw_data,
|
||||
const int naive CV_DEFAULT(50),
|
||||
const double rho CV_DEFAULT(.7),
|
||||
const double tau CV_DEFAULT(.1) );
|
||||
|
||||
/* Release feature tree */
|
||||
CVAPI(void) cvReleaseFeatureTree(struct CvFeatureTree* tr);
|
||||
|
||||
/* Searches feature tree for k nearest neighbors of given reference points,
|
||||
searching (in case of kd-tree/bbf) at most emax leaves. */
|
||||
CVAPI(void) cvFindFeatures(struct CvFeatureTree* tr, const CvMat* query_points,
|
||||
CvMat* indices, CvMat* dist, int k, int emax CV_DEFAULT(20));
|
||||
|
||||
/* Search feature tree for all points that are inlier to given rect region.
|
||||
Only implemented for kd trees */
|
||||
CVAPI(int) cvFindFeaturesBoxed(struct CvFeatureTree* tr,
|
||||
CvMat* bounds_min, CvMat* bounds_max,
|
||||
CvMat* out_indices);
|
||||
|
||||
|
||||
/* Construct a Locality Sensitive Hash (LSH) table, for indexing d-dimensional vectors of
|
||||
given type. Vectors will be hashed L times with k-dimensional p-stable (p=2) functions. */
|
||||
CVAPI(struct CvLSH*) cvCreateLSH(struct CvLSHOperations* ops, int d,
|
||||
int L CV_DEFAULT(10), int k CV_DEFAULT(10),
|
||||
int type CV_DEFAULT(CV_64FC1), double r CV_DEFAULT(4),
|
||||
int64 seed CV_DEFAULT(-1));
|
||||
|
||||
/* Construct in-memory LSH table, with n bins. */
|
||||
CVAPI(struct CvLSH*) cvCreateMemoryLSH(int d, int n, int L CV_DEFAULT(10), int k CV_DEFAULT(10),
|
||||
int type CV_DEFAULT(CV_64FC1), double r CV_DEFAULT(4),
|
||||
int64 seed CV_DEFAULT(-1));
|
||||
|
||||
/* Free the given LSH structure. */
|
||||
CVAPI(void) cvReleaseLSH(struct CvLSH** lsh);
|
||||
|
||||
/* Return the number of vectors in the LSH. */
|
||||
CVAPI(unsigned int) LSHSize(struct CvLSH* lsh);
|
||||
|
||||
/* Add vectors to the LSH structure, optionally returning indices. */
|
||||
CVAPI(void) cvLSHAdd(struct CvLSH* lsh, const CvMat* data, CvMat* indices CV_DEFAULT(0));
|
||||
|
||||
/* Remove vectors from LSH, as addressed by given indices. */
|
||||
CVAPI(void) cvLSHRemove(struct CvLSH* lsh, const CvMat* indices);
|
||||
|
||||
/* Query the LSH n times for at most k nearest points; data is n x d,
|
||||
indices and dist are n x k. At most emax stored points will be accessed. */
|
||||
CVAPI(void) cvLSHQuery(struct CvLSH* lsh, const CvMat* query_points,
|
||||
CvMat* indices, CvMat* dist, int k, int emax);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#include "opencv2/imgproc/compat_c.h"
|
||||
|
||||
#endif
|
492
modules/imgproc/include/opencv2/imgproc/types_c.h
Normal file
492
modules/imgproc/include/opencv2/imgproc/types_c.h
Normal file
@@ -0,0 +1,492 @@
|
||||
/*M///////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
|
||||
//
|
||||
// By downloading, copying, installing or using the software you agree to this license.
|
||||
// If you do not agree to this license, do not download, install,
|
||||
// copy or use the software.
|
||||
//
|
||||
//
|
||||
// License Agreement
|
||||
// For Open Source Computer Vision Library
|
||||
//
|
||||
// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
|
||||
// Copyright (C) 2009, Willow Garage Inc., all rights reserved.
|
||||
// Third party copyrights are property of their respective owners.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification,
|
||||
// are permitted provided that the following conditions are met:
|
||||
//
|
||||
// * Redistribution's of source code must retain the above copyright notice,
|
||||
// this list of conditions and the following disclaimer.
|
||||
//
|
||||
// * Redistribution's in binary form must reproduce the above copyright notice,
|
||||
// this list of conditions and the following disclaimer in the documentation
|
||||
// and/or other materials provided with the distribution.
|
||||
//
|
||||
// * The name of the copyright holders may not be used to endorse or promote products
|
||||
// derived from this software without specific prior written permission.
|
||||
//
|
||||
// This software is provided by the copyright holders and contributors "as is" and
|
||||
// any express or implied warranties, including, but not limited to, the implied
|
||||
// warranties of merchantability and fitness for a particular purpose are disclaimed.
|
||||
// In no event shall the Intel Corporation or contributors be liable for any direct,
|
||||
// indirect, incidental, special, exemplary, or consequential damages
|
||||
// (including, but not limited to, procurement of substitute goods or services;
|
||||
// loss of use, data, or profits; or business interruption) however caused
|
||||
// and on any theory of liability, whether in contract, strict liability,
|
||||
// or tort (including negligence or otherwise) arising in any way out of
|
||||
// the use of this software, even if advised of the possibility of such damage.
|
||||
//
|
||||
//M*/
|
||||
|
||||
#ifndef __OPENCV_IMGPROC_TYPES_C_H__
|
||||
#define __OPENCV_IMGPROC_TYPES_C_H__
|
||||
|
||||
#include "opencv2/core/core_c.h"
|
||||
#include "opencv2/imgproc/types_c.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Connected component structure */
|
||||
typedef struct CvConnectedComp
|
||||
{
|
||||
double area; /* area of the connected component */
|
||||
CvScalar value; /* average color of the connected component */
|
||||
CvRect rect; /* ROI of the component */
|
||||
CvSeq* contour; /* optional component boundary
|
||||
(the contour might have child contours corresponding to the holes)*/
|
||||
}
|
||||
CvConnectedComp;
|
||||
|
||||
/* Image smooth methods */
|
||||
enum
|
||||
{
|
||||
CV_BLUR_NO_SCALE =0,
|
||||
CV_BLUR =1,
|
||||
CV_GAUSSIAN =2,
|
||||
CV_MEDIAN =3,
|
||||
CV_BILATERAL =4
|
||||
};
|
||||
|
||||
/* Filters used in pyramid decomposition */
|
||||
enum
|
||||
{
|
||||
CV_GAUSSIAN_5x5 = 7
|
||||
};
|
||||
|
||||
/* Inpainting algorithms */
|
||||
enum
|
||||
{
|
||||
CV_INPAINT_NS =0,
|
||||
CV_INPAINT_TELEA =1
|
||||
};
|
||||
|
||||
/* Special filters */
|
||||
enum
|
||||
{
|
||||
CV_SCHARR =-1,
|
||||
CV_MAX_SOBEL_KSIZE =7
|
||||
};
|
||||
|
||||
/* Constants for color conversion */
|
||||
enum
|
||||
{
|
||||
CV_BGR2BGRA =0,
|
||||
CV_RGB2RGBA =CV_BGR2BGRA,
|
||||
|
||||
CV_BGRA2BGR =1,
|
||||
CV_RGBA2RGB =CV_BGRA2BGR,
|
||||
|
||||
CV_BGR2RGBA =2,
|
||||
CV_RGB2BGRA =CV_BGR2RGBA,
|
||||
|
||||
CV_RGBA2BGR =3,
|
||||
CV_BGRA2RGB =CV_RGBA2BGR,
|
||||
|
||||
CV_BGR2RGB =4,
|
||||
CV_RGB2BGR =CV_BGR2RGB,
|
||||
|
||||
CV_BGRA2RGBA =5,
|
||||
CV_RGBA2BGRA =CV_BGRA2RGBA,
|
||||
|
||||
CV_BGR2GRAY =6,
|
||||
CV_RGB2GRAY =7,
|
||||
CV_GRAY2BGR =8,
|
||||
CV_GRAY2RGB =CV_GRAY2BGR,
|
||||
CV_GRAY2BGRA =9,
|
||||
CV_GRAY2RGBA =CV_GRAY2BGRA,
|
||||
CV_BGRA2GRAY =10,
|
||||
CV_RGBA2GRAY =11,
|
||||
|
||||
CV_BGR2BGR565 =12,
|
||||
CV_RGB2BGR565 =13,
|
||||
CV_BGR5652BGR =14,
|
||||
CV_BGR5652RGB =15,
|
||||
CV_BGRA2BGR565 =16,
|
||||
CV_RGBA2BGR565 =17,
|
||||
CV_BGR5652BGRA =18,
|
||||
CV_BGR5652RGBA =19,
|
||||
|
||||
CV_GRAY2BGR565 =20,
|
||||
CV_BGR5652GRAY =21,
|
||||
|
||||
CV_BGR2BGR555 =22,
|
||||
CV_RGB2BGR555 =23,
|
||||
CV_BGR5552BGR =24,
|
||||
CV_BGR5552RGB =25,
|
||||
CV_BGRA2BGR555 =26,
|
||||
CV_RGBA2BGR555 =27,
|
||||
CV_BGR5552BGRA =28,
|
||||
CV_BGR5552RGBA =29,
|
||||
|
||||
CV_GRAY2BGR555 =30,
|
||||
CV_BGR5552GRAY =31,
|
||||
|
||||
CV_BGR2XYZ =32,
|
||||
CV_RGB2XYZ =33,
|
||||
CV_XYZ2BGR =34,
|
||||
CV_XYZ2RGB =35,
|
||||
|
||||
CV_BGR2YCrCb =36,
|
||||
CV_RGB2YCrCb =37,
|
||||
CV_YCrCb2BGR =38,
|
||||
CV_YCrCb2RGB =39,
|
||||
|
||||
CV_BGR2HSV =40,
|
||||
CV_RGB2HSV =41,
|
||||
|
||||
CV_BGR2Lab =44,
|
||||
CV_RGB2Lab =45,
|
||||
|
||||
CV_BayerBG2BGR =46,
|
||||
CV_BayerGB2BGR =47,
|
||||
CV_BayerRG2BGR =48,
|
||||
CV_BayerGR2BGR =49,
|
||||
|
||||
CV_BayerBG2RGB =CV_BayerRG2BGR,
|
||||
CV_BayerGB2RGB =CV_BayerGR2BGR,
|
||||
CV_BayerRG2RGB =CV_BayerBG2BGR,
|
||||
CV_BayerGR2RGB =CV_BayerGB2BGR,
|
||||
|
||||
CV_BGR2Luv =50,
|
||||
CV_RGB2Luv =51,
|
||||
CV_BGR2HLS =52,
|
||||
CV_RGB2HLS =53,
|
||||
|
||||
CV_HSV2BGR =54,
|
||||
CV_HSV2RGB =55,
|
||||
|
||||
CV_Lab2BGR =56,
|
||||
CV_Lab2RGB =57,
|
||||
CV_Luv2BGR =58,
|
||||
CV_Luv2RGB =59,
|
||||
CV_HLS2BGR =60,
|
||||
CV_HLS2RGB =61,
|
||||
|
||||
CV_COLORCVT_MAX =100
|
||||
};
|
||||
|
||||
|
||||
/* Sub-pixel interpolation methods */
|
||||
enum
|
||||
{
|
||||
CV_INTER_NN =0,
|
||||
CV_INTER_LINEAR =1,
|
||||
CV_INTER_CUBIC =2,
|
||||
CV_INTER_AREA =3
|
||||
};
|
||||
|
||||
/* ... and other image warping flags */
|
||||
enum
|
||||
{
|
||||
CV_WARP_FILL_OUTLIERS =8,
|
||||
CV_WARP_INVERSE_MAP =16
|
||||
};
|
||||
|
||||
/* Shapes of a structuring element for morphological operations */
|
||||
enum
|
||||
{
|
||||
CV_SHAPE_RECT =0,
|
||||
CV_SHAPE_CROSS =1,
|
||||
CV_SHAPE_ELLIPSE =2,
|
||||
CV_SHAPE_CUSTOM =100
|
||||
};
|
||||
|
||||
/* Morphological operations */
|
||||
enum
|
||||
{
|
||||
CV_MOP_ERODE =0,
|
||||
CV_MOP_DILATE =1,
|
||||
CV_MOP_OPEN =2,
|
||||
CV_MOP_CLOSE =3,
|
||||
CV_MOP_GRADIENT =4,
|
||||
CV_MOP_TOPHAT =5,
|
||||
CV_MOP_BLACKHAT =6
|
||||
};
|
||||
|
||||
/* Spatial and central moments */
|
||||
typedef struct CvMoments
|
||||
{
|
||||
double m00, m10, m01, m20, m11, m02, m30, m21, m12, m03; /* spatial moments */
|
||||
double mu20, mu11, mu02, mu30, mu21, mu12, mu03; /* central moments */
|
||||
double inv_sqrt_m00; /* m00 != 0 ? 1/sqrt(m00) : 0 */
|
||||
}
|
||||
CvMoments;
|
||||
|
||||
/* Hu invariants */
|
||||
typedef struct CvHuMoments
|
||||
{
|
||||
double hu1, hu2, hu3, hu4, hu5, hu6, hu7; /* Hu invariants */
|
||||
}
|
||||
CvHuMoments;
|
||||
|
||||
/* Template matching methods */
|
||||
enum
|
||||
{
|
||||
CV_TM_SQDIFF =0,
|
||||
CV_TM_SQDIFF_NORMED =1,
|
||||
CV_TM_CCORR =2,
|
||||
CV_TM_CCORR_NORMED =3,
|
||||
CV_TM_CCOEFF =4,
|
||||
CV_TM_CCOEFF_NORMED =5
|
||||
};
|
||||
|
||||
typedef float (CV_CDECL * CvDistanceFunction)( const float* a, const float* b, void* user_param );
|
||||
|
||||
/* Contour retrieval modes */
|
||||
enum
|
||||
{
|
||||
CV_RETR_EXTERNAL=0,
|
||||
CV_RETR_LIST=1,
|
||||
CV_RETR_CCOMP=2,
|
||||
CV_RETR_TREE=3
|
||||
};
|
||||
|
||||
/* Contour approximation methods */
|
||||
enum
|
||||
{
|
||||
CV_CHAIN_CODE=0,
|
||||
CV_CHAIN_APPROX_NONE=1,
|
||||
CV_CHAIN_APPROX_SIMPLE=2,
|
||||
CV_CHAIN_APPROX_TC89_L1=3,
|
||||
CV_CHAIN_APPROX_TC89_KCOS=4,
|
||||
CV_LINK_RUNS=5
|
||||
};
|
||||
|
||||
/*
|
||||
Internal structure that is used for sequental retrieving contours from the image.
|
||||
It supports both hierarchical and plane variants of Suzuki algorithm.
|
||||
*/
|
||||
typedef struct _CvContourScanner* CvContourScanner;
|
||||
|
||||
/* Freeman chain reader state */
|
||||
typedef struct CvChainPtReader
|
||||
{
|
||||
CV_SEQ_READER_FIELDS()
|
||||
char code;
|
||||
CvPoint pt;
|
||||
schar deltas[8][2];
|
||||
}
|
||||
CvChainPtReader;
|
||||
|
||||
/* initializes 8-element array for fast access to 3x3 neighborhood of a pixel */
|
||||
#define CV_INIT_3X3_DELTAS( deltas, step, nch ) \
|
||||
((deltas)[0] = (nch), (deltas)[1] = -(step) + (nch), \
|
||||
(deltas)[2] = -(step), (deltas)[3] = -(step) - (nch), \
|
||||
(deltas)[4] = -(nch), (deltas)[5] = (step) - (nch), \
|
||||
(deltas)[6] = (step), (deltas)[7] = (step) + (nch))
|
||||
|
||||
|
||||
/****************************************************************************************\
|
||||
* Planar subdivisions *
|
||||
\****************************************************************************************/
|
||||
|
||||
typedef size_t CvSubdiv2DEdge;
|
||||
|
||||
#define CV_QUADEDGE2D_FIELDS() \
|
||||
int flags; \
|
||||
struct CvSubdiv2DPoint* pt[4]; \
|
||||
CvSubdiv2DEdge next[4];
|
||||
|
||||
#define CV_SUBDIV2D_POINT_FIELDS()\
|
||||
int flags; \
|
||||
CvSubdiv2DEdge first; \
|
||||
CvPoint2D32f pt; \
|
||||
int id;
|
||||
|
||||
#define CV_SUBDIV2D_VIRTUAL_POINT_FLAG (1 << 30)
|
||||
|
||||
typedef struct CvQuadEdge2D
|
||||
{
|
||||
CV_QUADEDGE2D_FIELDS()
|
||||
}
|
||||
CvQuadEdge2D;
|
||||
|
||||
typedef struct CvSubdiv2DPoint
|
||||
{
|
||||
CV_SUBDIV2D_POINT_FIELDS()
|
||||
}
|
||||
CvSubdiv2DPoint;
|
||||
|
||||
#define CV_SUBDIV2D_FIELDS() \
|
||||
CV_GRAPH_FIELDS() \
|
||||
int quad_edges; \
|
||||
int is_geometry_valid; \
|
||||
CvSubdiv2DEdge recent_edge; \
|
||||
CvPoint2D32f topleft; \
|
||||
CvPoint2D32f bottomright;
|
||||
|
||||
typedef struct CvSubdiv2D
|
||||
{
|
||||
CV_SUBDIV2D_FIELDS()
|
||||
}
|
||||
CvSubdiv2D;
|
||||
|
||||
|
||||
typedef enum CvSubdiv2DPointLocation
|
||||
{
|
||||
CV_PTLOC_ERROR = -2,
|
||||
CV_PTLOC_OUTSIDE_RECT = -1,
|
||||
CV_PTLOC_INSIDE = 0,
|
||||
CV_PTLOC_VERTEX = 1,
|
||||
CV_PTLOC_ON_EDGE = 2
|
||||
}
|
||||
CvSubdiv2DPointLocation;
|
||||
|
||||
typedef enum CvNextEdgeType
|
||||
{
|
||||
CV_NEXT_AROUND_ORG = 0x00,
|
||||
CV_NEXT_AROUND_DST = 0x22,
|
||||
CV_PREV_AROUND_ORG = 0x11,
|
||||
CV_PREV_AROUND_DST = 0x33,
|
||||
CV_NEXT_AROUND_LEFT = 0x13,
|
||||
CV_NEXT_AROUND_RIGHT = 0x31,
|
||||
CV_PREV_AROUND_LEFT = 0x20,
|
||||
CV_PREV_AROUND_RIGHT = 0x02
|
||||
}
|
||||
CvNextEdgeType;
|
||||
|
||||
/* get the next edge with the same origin point (counterwise) */
|
||||
#define CV_SUBDIV2D_NEXT_EDGE( edge ) (((CvQuadEdge2D*)((edge) & ~3))->next[(edge)&3])
|
||||
|
||||
|
||||
/* Contour approximation algorithms */
|
||||
enum
|
||||
{
|
||||
CV_POLY_APPROX_DP = 0
|
||||
};
|
||||
|
||||
/* Shape matching methods */
|
||||
enum
|
||||
{
|
||||
CV_CONTOURS_MATCH_I1 =1,
|
||||
CV_CONTOURS_MATCH_I2 =2,
|
||||
CV_CONTOURS_MATCH_I3 =3
|
||||
};
|
||||
|
||||
/* Shape orientation */
|
||||
enum
|
||||
{
|
||||
CV_CLOCKWISE =1,
|
||||
CV_COUNTER_CLOCKWISE =2
|
||||
};
|
||||
|
||||
|
||||
/* Convexity defect */
|
||||
typedef struct CvConvexityDefect
|
||||
{
|
||||
CvPoint* start; /* point of the contour where the defect begins */
|
||||
CvPoint* end; /* point of the contour where the defect ends */
|
||||
CvPoint* depth_point; /* the farthest from the convex hull point within the defect */
|
||||
float depth; /* distance between the farthest point and the convex hull */
|
||||
} CvConvexityDefect;
|
||||
|
||||
|
||||
/* Histogram comparison methods */
|
||||
enum
|
||||
{
|
||||
CV_COMP_CORREL =0,
|
||||
CV_COMP_CHISQR =1,
|
||||
CV_COMP_INTERSECT =2,
|
||||
CV_COMP_BHATTACHARYYA =3
|
||||
};
|
||||
|
||||
/* Mask size for distance transform */
|
||||
enum
|
||||
{
|
||||
CV_DIST_MASK_3 =3,
|
||||
CV_DIST_MASK_5 =5,
|
||||
CV_DIST_MASK_PRECISE =0
|
||||
};
|
||||
|
||||
/* Distance types for Distance Transform and M-estimators */
|
||||
enum
|
||||
{
|
||||
CV_DIST_USER =-1, /* User defined distance */
|
||||
CV_DIST_L1 =1, /* distance = |x1-x2| + |y1-y2| */
|
||||
CV_DIST_L2 =2, /* the simple euclidean distance */
|
||||
CV_DIST_C =3, /* distance = max(|x1-x2|,|y1-y2|) */
|
||||
CV_DIST_L12 =4, /* L1-L2 metric: distance = 2(sqrt(1+x*x/2) - 1)) */
|
||||
CV_DIST_FAIR =5, /* distance = c^2(|x|/c-log(1+|x|/c)), c = 1.3998 */
|
||||
CV_DIST_WELSCH =6, /* distance = c^2/2(1-exp(-(x/c)^2)), c = 2.9846 */
|
||||
CV_DIST_HUBER =7 /* distance = |x|<c ? x^2/2 : c(|x|-c/2), c=1.345 */
|
||||
};
|
||||
|
||||
|
||||
/* Threshold types */
|
||||
enum
|
||||
{
|
||||
CV_THRESH_BINARY =0, /* value = value > threshold ? max_value : 0 */
|
||||
CV_THRESH_BINARY_INV =1, /* value = value > threshold ? 0 : max_value */
|
||||
CV_THRESH_TRUNC =2, /* value = value > threshold ? threshold : value */
|
||||
CV_THRESH_TOZERO =3, /* value = value > threshold ? value : 0 */
|
||||
CV_THRESH_TOZERO_INV =4, /* value = value > threshold ? 0 : value */
|
||||
CV_THRESH_MASK =7,
|
||||
CV_THRESH_OTSU =8 /* use Otsu algorithm to choose the optimal threshold value;
|
||||
combine the flag with one of the above CV_THRESH_* values */
|
||||
};
|
||||
|
||||
/* Adaptive threshold methods */
|
||||
enum
|
||||
{
|
||||
CV_ADAPTIVE_THRESH_MEAN_C =0,
|
||||
CV_ADAPTIVE_THRESH_GAUSSIAN_C =1
|
||||
};
|
||||
|
||||
/* FloodFill flags */
|
||||
enum
|
||||
{
|
||||
CV_FLOODFILL_FIXED_RANGE =(1 << 16),
|
||||
CV_FLOODFILL_MASK_ONLY =(1 << 17)
|
||||
};
|
||||
|
||||
|
||||
/* Canny edge detector flags */
|
||||
enum
|
||||
{
|
||||
CV_CANNY_L2_GRADIENT =(1 << 31)
|
||||
};
|
||||
|
||||
/* Variants of a Hough transform */
|
||||
enum
|
||||
{
|
||||
CV_HOUGH_STANDARD =0,
|
||||
CV_HOUGH_PROBABILISTIC =1,
|
||||
CV_HOUGH_MULTI_SCALE =2,
|
||||
CV_HOUGH_GRADIENT =3
|
||||
};
|
||||
|
||||
|
||||
/* Fast search data structures */
|
||||
struct CvFeatureTree;
|
||||
struct CvLSH;
|
||||
struct CvLSHOperations;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user