123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745 |
- #ifndef OPENCV_CORE_BASE_HPP
- #define OPENCV_CORE_BASE_HPP
- #ifndef __cplusplus
- # error base.hpp header must be compiled as C++
- #endif
- #include "opencv2/opencv_modules.hpp"
- #include <climits>
- #include <algorithm>
- #include "opencv2/core/cvdef.h"
- #include "opencv2/core/cvstd.hpp"
- namespace cv
- {
- namespace Error {
- enum Code {
- StsOk= 0,
- StsBackTrace= -1,
- StsError= -2,
- StsInternal= -3,
- StsNoMem= -4,
- StsBadArg= -5,
- StsBadFunc= -6,
- StsNoConv= -7,
- StsAutoTrace= -8,
- HeaderIsNull= -9,
- BadImageSize= -10,
- BadOffset= -11,
- BadDataPtr= -12,
- BadStep= -13,
- BadModelOrChSeq= -14,
- BadNumChannels= -15,
- BadNumChannel1U= -16,
- BadDepth= -17,
- BadAlphaChannel= -18,
- BadOrder= -19,
- BadOrigin= -20,
- BadAlign= -21,
- BadCallBack= -22,
- BadTileSize= -23,
- BadCOI= -24,
- BadROISize= -25,
- MaskIsTiled= -26,
- StsNullPtr= -27,
- StsVecLengthErr= -28,
- StsFilterStructContentErr= -29,
- StsKernelStructContentErr= -30,
- StsFilterOffsetErr= -31,
- StsBadSize= -201,
- StsDivByZero= -202,
- StsInplaceNotSupported= -203,
- StsObjectNotFound= -204,
- StsUnmatchedFormats= -205,
- StsBadFlag= -206,
- StsBadPoint= -207,
- StsBadMask= -208,
- StsUnmatchedSizes= -209,
- StsUnsupportedFormat= -210,
- StsOutOfRange= -211,
- StsParseError= -212,
- StsNotImplemented= -213,
- StsBadMemBlock= -214,
- StsAssert= -215,
- GpuNotSupported= -216,
- GpuApiCallError= -217,
- OpenGlNotSupported= -218,
- OpenGlApiCallError= -219,
- OpenCLApiCallError= -220,
- OpenCLDoubleNotSupported= -221,
- OpenCLInitError= -222,
- OpenCLNoAMDBlasFft= -223
- };
- }
- enum DecompTypes {
-
- DECOMP_LU = 0,
-
- DECOMP_SVD = 1,
-
- DECOMP_EIG = 2,
-
- DECOMP_CHOLESKY = 3,
-
- DECOMP_QR = 4,
-
- DECOMP_NORMAL = 16
- };
- enum NormTypes {
-
- NORM_INF = 1,
-
- NORM_L1 = 2,
-
- NORM_L2 = 4,
-
- NORM_L2SQR = 5,
-
- NORM_HAMMING = 6,
-
- NORM_HAMMING2 = 7,
- NORM_TYPE_MASK = 7,
- NORM_RELATIVE = 8,
- NORM_MINMAX = 32
- };
- enum CmpTypes { CMP_EQ = 0,
- CMP_GT = 1,
- CMP_GE = 2,
- CMP_LT = 3,
- CMP_LE = 4,
- CMP_NE = 5
- };
- enum GemmFlags { GEMM_1_T = 1,
- GEMM_2_T = 2,
- GEMM_3_T = 4
- };
- enum DftFlags {
-
- DFT_INVERSE = 1,
-
- DFT_SCALE = 2,
-
- DFT_ROWS = 4,
-
- DFT_COMPLEX_OUTPUT = 16,
-
- DFT_REAL_OUTPUT = 32,
-
- DFT_COMPLEX_INPUT = 64,
-
- DCT_INVERSE = DFT_INVERSE,
-
- DCT_ROWS = DFT_ROWS
- };
- enum BorderTypes {
- BORDER_CONSTANT = 0,
- BORDER_REPLICATE = 1,
- BORDER_REFLECT = 2,
- BORDER_WRAP = 3,
- BORDER_REFLECT_101 = 4,
- BORDER_TRANSPARENT = 5,
- BORDER_REFLECT101 = BORDER_REFLECT_101,
- BORDER_DEFAULT = BORDER_REFLECT_101,
- BORDER_ISOLATED = 16
- };
- #define CVAUX_CONCAT_EXP(a, b) a##b
- #define CVAUX_CONCAT(a, b) CVAUX_CONCAT_EXP(a,b)
- #if defined(__clang__)
- # ifndef __has_extension
- # define __has_extension __has_feature
- # endif
- # if __has_extension(cxx_static_assert)
- # define CV_StaticAssert(condition, reason) static_assert((condition), reason " " #condition)
- # elif __has_extension(c_static_assert)
- # define CV_StaticAssert(condition, reason) _Static_assert((condition), reason " " #condition)
- # endif
- #elif defined(__GNUC__)
- # if (defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L)
- # define CV_StaticAssert(condition, reason) static_assert((condition), reason " " #condition)
- # endif
- #elif defined(_MSC_VER)
- # if _MSC_VER >= 1600
- # define CV_StaticAssert(condition, reason) static_assert((condition), reason " " #condition)
- # endif
- #endif
- #ifndef CV_StaticAssert
- # if !defined(__clang__) && defined(__GNUC__) && (__GNUC__*100 + __GNUC_MINOR__ > 302)
- # define CV_StaticAssert(condition, reason) ({ extern int __attribute__((error("CV_StaticAssert: " reason " " #condition))) CV_StaticAssert(); ((condition) ? 0 : CV_StaticAssert()); })
- # else
- template <bool x> struct CV_StaticAssert_failed;
- template <> struct CV_StaticAssert_failed<true> { enum { val = 1 }; };
- template<int x> struct CV_StaticAssert_test {};
- # define CV_StaticAssert(condition, reason)\
- typedef cv::CV_StaticAssert_test< sizeof(cv::CV_StaticAssert_failed< static_cast<bool>(condition) >) > CVAUX_CONCAT(CV_StaticAssert_failed_at_, __LINE__)
- # endif
- #endif
- #if defined(_MSC_VER)
- #define CV_DO_PRAGMA(x) __pragma(x)
- #elif defined(__GNUC__)
- #define CV_DO_PRAGMA(x) _Pragma (#x)
- #else
- #define CV_DO_PRAGMA(x)
- #endif
- #ifdef _MSC_VER
- #define CV_SUPPRESS_DEPRECATED_START \
- CV_DO_PRAGMA(warning(push)) \
- CV_DO_PRAGMA(warning(disable: 4996))
- #define CV_SUPPRESS_DEPRECATED_END CV_DO_PRAGMA(warning(pop))
- #elif defined (__clang__) || ((__GNUC__) && (__GNUC__*100 + __GNUC_MINOR__ > 405))
- #define CV_SUPPRESS_DEPRECATED_START \
- CV_DO_PRAGMA(GCC diagnostic push) \
- CV_DO_PRAGMA(GCC diagnostic ignored "-Wdeprecated-declarations")
- #define CV_SUPPRESS_DEPRECATED_END CV_DO_PRAGMA(GCC diagnostic pop)
- #else
- #define CV_SUPPRESS_DEPRECATED_START
- #define CV_SUPPRESS_DEPRECATED_END
- #endif
- #define CV_UNUSED(name) (void)name
- CV_EXPORTS void error(int _code, const String& _err, const char* _func, const char* _file, int _line);
- #ifdef __GNUC__
- # if defined __clang__ || defined __APPLE__
- # pragma GCC diagnostic push
- # pragma GCC diagnostic ignored "-Winvalid-noreturn"
- # endif
- #endif
- CV_INLINE CV_NORETURN void errorNoReturn(int _code, const String& _err, const char* _func, const char* _file, int _line)
- {
- error(_code, _err, _func, _file, _line);
- #ifdef __GNUC__
- # if !defined __clang__ && !defined __APPLE__
-
- __builtin_trap();
-
- # endif
- #endif
- }
- #ifdef __GNUC__
- # if defined __clang__ || defined __APPLE__
- # pragma GCC diagnostic pop
- # endif
- #endif
- #if defined __GNUC__
- #define CV_Func __func__
- #elif defined _MSC_VER
- #define CV_Func __FUNCTION__
- #else
- #define CV_Func ""
- #endif
- #ifdef CV_STATIC_ANALYSIS
- #define CV_Error(...) do { abort(); } while (0)
- #define CV_Error_(...) do { abort(); } while (0)
- #define CV_Assert(cond) do { if (!(cond)) abort(); } while (0)
- #define CV_ErrorNoReturn(...) do { abort(); } while (0)
- #define CV_ErrorNoReturn_(...) do { abort(); } while (0)
- #else
- #define CV_Error( code, msg ) cv::error( code, msg, CV_Func, __FILE__, __LINE__ )
- #define CV_Error_( code, args ) cv::error( code, cv::format args, CV_Func, __FILE__, __LINE__ )
- #define CV_VA_NUM_ARGS_HELPER(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, N, ...) N
- #define CV_VA_NUM_ARGS(...) CV_VA_NUM_ARGS_HELPER(__VA_ARGS__, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0)
- #define CV_Assert_1( expr ) if(!!(expr)) ; else cv::error( cv::Error::StsAssert, #expr, CV_Func, __FILE__, __LINE__ )
- #define CV_Assert_2( expr1, expr2 ) CV_Assert_1(expr1); CV_Assert_1(expr2)
- #define CV_Assert_3( expr1, expr2, expr3 ) CV_Assert_2(expr1, expr2); CV_Assert_1(expr3)
- #define CV_Assert_4( expr1, expr2, expr3, expr4 ) CV_Assert_3(expr1, expr2, expr3); CV_Assert_1(expr4)
- #define CV_Assert_5( expr1, expr2, expr3, expr4, expr5 ) CV_Assert_4(expr1, expr2, expr3, expr4); CV_Assert_1(expr5)
- #define CV_Assert_6( expr1, expr2, expr3, expr4, expr5, expr6 ) CV_Assert_5(expr1, expr2, expr3, expr4, expr5); CV_Assert_1(expr6)
- #define CV_Assert_7( expr1, expr2, expr3, expr4, expr5, expr6, expr7 ) CV_Assert_6(expr1, expr2, expr3, expr4, expr5, expr6 ); CV_Assert_1(expr7)
- #define CV_Assert_8( expr1, expr2, expr3, expr4, expr5, expr6, expr7, expr8 ) CV_Assert_7(expr1, expr2, expr3, expr4, expr5, expr6, expr7 ); CV_Assert_1(expr8)
- #define CV_Assert_9( expr1, expr2, expr3, expr4, expr5, expr6, expr7, expr8, expr9 ) CV_Assert_8(expr1, expr2, expr3, expr4, expr5, expr6, expr7, expr8 ); CV_Assert_1(expr9)
- #define CV_Assert_10( expr1, expr2, expr3, expr4, expr5, expr6, expr7, expr8, expr9, expr10 ) CV_Assert_9(expr1, expr2, expr3, expr4, expr5, expr6, expr7, expr8, expr9 ); CV_Assert_1(expr10)
- #define CV_Assert(...) CVAUX_CONCAT(CV_Assert_, CV_VA_NUM_ARGS(__VA_ARGS__)) (__VA_ARGS__)
- #define CV_ErrorNoReturn( code, msg ) cv::errorNoReturn( code, msg, CV_Func, __FILE__, __LINE__ )
- #define CV_ErrorNoReturn_( code, args ) cv::errorNoReturn( code, cv::format args, CV_Func, __FILE__, __LINE__ )
- #endif
- #ifdef _DEBUG
- # define CV_DbgAssert(expr) CV_Assert(expr)
- #else
- # define CV_DbgAssert(expr)
- #endif
- struct CV_EXPORTS Hamming
- {
- enum { normType = NORM_HAMMING };
- typedef unsigned char ValueType;
- typedef int ResultType;
-
- ResultType operator()( const unsigned char* a, const unsigned char* b, int size ) const;
- };
- typedef Hamming HammingLUT;
- template<typename _Tp> inline _Tp cv_abs(_Tp x) { return std::abs(x); }
- inline int cv_abs(uchar x) { return x; }
- inline int cv_abs(schar x) { return std::abs(x); }
- inline int cv_abs(ushort x) { return x; }
- inline int cv_abs(short x) { return std::abs(x); }
- template<typename _Tp, typename _AccTp> static inline
- _AccTp normL2Sqr(const _Tp* a, int n)
- {
- _AccTp s = 0;
- int i=0;
- #if CV_ENABLE_UNROLLED
- for( ; i <= n - 4; i += 4 )
- {
- _AccTp v0 = a[i], v1 = a[i+1], v2 = a[i+2], v3 = a[i+3];
- s += v0*v0 + v1*v1 + v2*v2 + v3*v3;
- }
- #endif
- for( ; i < n; i++ )
- {
- _AccTp v = a[i];
- s += v*v;
- }
- return s;
- }
- template<typename _Tp, typename _AccTp> static inline
- _AccTp normL1(const _Tp* a, int n)
- {
- _AccTp s = 0;
- int i = 0;
- #if CV_ENABLE_UNROLLED
- for(; i <= n - 4; i += 4 )
- {
- s += (_AccTp)cv_abs(a[i]) + (_AccTp)cv_abs(a[i+1]) +
- (_AccTp)cv_abs(a[i+2]) + (_AccTp)cv_abs(a[i+3]);
- }
- #endif
- for( ; i < n; i++ )
- s += cv_abs(a[i]);
- return s;
- }
- template<typename _Tp, typename _AccTp> static inline
- _AccTp normInf(const _Tp* a, int n)
- {
- _AccTp s = 0;
- for( int i = 0; i < n; i++ )
- s = std::max(s, (_AccTp)cv_abs(a[i]));
- return s;
- }
- template<typename _Tp, typename _AccTp> static inline
- _AccTp normL2Sqr(const _Tp* a, const _Tp* b, int n)
- {
- _AccTp s = 0;
- int i= 0;
- #if CV_ENABLE_UNROLLED
- for(; i <= n - 4; i += 4 )
- {
- _AccTp v0 = _AccTp(a[i] - b[i]), v1 = _AccTp(a[i+1] - b[i+1]), v2 = _AccTp(a[i+2] - b[i+2]), v3 = _AccTp(a[i+3] - b[i+3]);
- s += v0*v0 + v1*v1 + v2*v2 + v3*v3;
- }
- #endif
- for( ; i < n; i++ )
- {
- _AccTp v = _AccTp(a[i] - b[i]);
- s += v*v;
- }
- return s;
- }
- static inline float normL2Sqr(const float* a, const float* b, int n)
- {
- float s = 0.f;
- for( int i = 0; i < n; i++ )
- {
- float v = a[i] - b[i];
- s += v*v;
- }
- return s;
- }
- template<typename _Tp, typename _AccTp> static inline
- _AccTp normL1(const _Tp* a, const _Tp* b, int n)
- {
- _AccTp s = 0;
- int i= 0;
- #if CV_ENABLE_UNROLLED
- for(; i <= n - 4; i += 4 )
- {
- _AccTp v0 = _AccTp(a[i] - b[i]), v1 = _AccTp(a[i+1] - b[i+1]), v2 = _AccTp(a[i+2] - b[i+2]), v3 = _AccTp(a[i+3] - b[i+3]);
- s += std::abs(v0) + std::abs(v1) + std::abs(v2) + std::abs(v3);
- }
- #endif
- for( ; i < n; i++ )
- {
- _AccTp v = _AccTp(a[i] - b[i]);
- s += std::abs(v);
- }
- return s;
- }
- inline float normL1(const float* a, const float* b, int n)
- {
- float s = 0.f;
- for( int i = 0; i < n; i++ )
- {
- s += std::abs(a[i] - b[i]);
- }
- return s;
- }
- inline int normL1(const uchar* a, const uchar* b, int n)
- {
- int s = 0;
- for( int i = 0; i < n; i++ )
- {
- s += std::abs(a[i] - b[i]);
- }
- return s;
- }
- template<typename _Tp, typename _AccTp> static inline
- _AccTp normInf(const _Tp* a, const _Tp* b, int n)
- {
- _AccTp s = 0;
- for( int i = 0; i < n; i++ )
- {
- _AccTp v0 = a[i] - b[i];
- s = std::max(s, std::abs(v0));
- }
- return s;
- }
- CV_EXPORTS_W float cubeRoot(float val);
- CV_EXPORTS_W float fastAtan2(float y, float x);
- CV_EXPORTS int LU(float* A, size_t astep, int m, float* b, size_t bstep, int n);
- CV_EXPORTS int LU(double* A, size_t astep, int m, double* b, size_t bstep, int n);
- CV_EXPORTS bool Cholesky(float* A, size_t astep, int m, float* b, size_t bstep, int n);
- CV_EXPORTS bool Cholesky(double* A, size_t astep, int m, double* b, size_t bstep, int n);
- template<typename _Tp, int cn> class Vec;
- template<typename _Tp, int m, int n> class Matx;
- template<typename _Tp> class Complex;
- template<typename _Tp> class Point_;
- template<typename _Tp> class Point3_;
- template<typename _Tp> class Size_;
- template<typename _Tp> class Rect_;
- template<typename _Tp> class Scalar_;
- class CV_EXPORTS RotatedRect;
- class CV_EXPORTS Range;
- class CV_EXPORTS TermCriteria;
- class CV_EXPORTS KeyPoint;
- class CV_EXPORTS DMatch;
- class CV_EXPORTS RNG;
- class CV_EXPORTS Mat;
- class CV_EXPORTS MatExpr;
- class CV_EXPORTS UMat;
- class CV_EXPORTS SparseMat;
- typedef Mat MatND;
- template<typename _Tp> class Mat_;
- template<typename _Tp> class SparseMat_;
- class CV_EXPORTS MatConstIterator;
- class CV_EXPORTS SparseMatIterator;
- class CV_EXPORTS SparseMatConstIterator;
- template<typename _Tp> class MatIterator_;
- template<typename _Tp> class MatConstIterator_;
- template<typename _Tp> class SparseMatIterator_;
- template<typename _Tp> class SparseMatConstIterator_;
- namespace ogl
- {
- class CV_EXPORTS Buffer;
- class CV_EXPORTS Texture2D;
- class CV_EXPORTS Arrays;
- }
- namespace cuda
- {
- class CV_EXPORTS GpuMat;
- class CV_EXPORTS HostMem;
- class CV_EXPORTS Stream;
- class CV_EXPORTS Event;
- }
- namespace cudev
- {
- template <typename _Tp> class GpuMat_;
- }
- namespace ipp
- {
- #if OPENCV_ABI_COMPATIBILITY > 300
- CV_EXPORTS unsigned long long getIppFeatures();
- #else
- CV_EXPORTS int getIppFeatures();
- #endif
- CV_EXPORTS void setIppStatus(int status, const char * const funcname = NULL, const char * const filename = NULL,
- int line = 0);
- CV_EXPORTS int getIppStatus();
- CV_EXPORTS String getIppErrorLocation();
- CV_EXPORTS_W bool useIPP();
- CV_EXPORTS_W void setUseIPP(bool flag);
- CV_EXPORTS_W String getIppVersion();
- CV_EXPORTS_W bool useIPP_NE();
- CV_EXPORTS_W void setUseIPP_NE(bool flag);
- }
- }
- #include "opencv2/core/neon_utils.hpp"
- #include "opencv2/core/vsx_utils.hpp"
- #endif
|