cxcore.hpp
资源名称:gabor.rar [点击查看]
上传用户:soukeisyuu
上传日期:2022-07-03
资源大小:5943k
文件大小:80k
源码类别:
波变换
开发平台:
Visual C++
- /*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 _CXCORE_HPP_
- #define _CXCORE_HPP_
- #include "cxmisc.h"
- #ifdef __cplusplus
- #ifndef SKIP_INCLUDES
- #include <algorithm>
- #include <cmath>
- #include <complex>
- #include <map>
- #include <new>
- #include <string>
- #include <vector>
- #endif // SKIP_INCLUDES
- namespace cv {
- #undef min
- #undef max
- using std::vector;
- using std::string;
- template<typename _Tp> class CV_EXPORTS Size_;
- template<typename _Tp> class CV_EXPORTS Point_;
- template<typename _Tp> class CV_EXPORTS Rect_;
- typedef std::string String;
- typedef std::basic_string<wchar_t> WString;
- CV_EXPORTS string fromUtf16(const WString& str);
- CV_EXPORTS WString toUtf16(const string& str);
- class CV_EXPORTS Exception
- {
- public:
- Exception() { code = 0; line = 0; }
- Exception(int _code, const string& _err, const string& _func, const string& _file, int _line)
- : code(_code), err(_err), func(_func), file(_file), line(_line) {}
- Exception(const Exception& exc)
- : code(exc.code), err(exc.err), func(exc.func), file(exc.file), line(exc.line) {}
- Exception& operator = (const Exception& exc)
- {
- if( this != &exc )
- {
- code = exc.code; err = exc.err; func = exc.func; file = exc.file; line = exc.line;
- }
- return *this;
- }
- int code;
- string err;
- string func;
- string file;
- int line;
- };
- CV_EXPORTS string format( const char* fmt, ... );
- CV_EXPORTS void error( const Exception& exc );
- CV_EXPORTS bool setBreakOnError(bool value);
- CV_EXPORTS CvErrorCallback redirectError( CvErrorCallback errCallback,
- void* userdata=0, void** prevUserdata=0);
- #ifdef __GNUC__
- #define CV_Error( code, msg ) cv::error( cv::Exception(code, msg, __func__, __FILE__, __LINE__) )
- #define CV_Error_( code, args ) cv::error( cv::Exception(code, cv::format args, __func__, __FILE__, __LINE__) )
- #define CV_Assert( expr ) { if(!(expr)) cv::error( cv::Exception(CV_StsAssert, #expr, __func__, __FILE__, __LINE__) ); }
- #else
- #define CV_Error( code, msg ) cv::error( cv::Exception(code, msg, "", __FILE__, __LINE__) )
- #define CV_Error_( code, args ) cv::error( cv::Exception(code, cv::format args, "", __FILE__, __LINE__) )
- #define CV_Assert( expr ) { if(!(expr)) cv::error( cv::Exception(CV_StsAssert, #expr, "", __FILE__, __LINE__) ); }
- #endif
- #ifdef _DEBUG
- #define CV_DbgAssert(expr) CV_Assert(expr)
- #else
- #define CV_DbgAssert(expr)
- #endif
- CV_EXPORTS void setNumThreads(int);
- CV_EXPORTS int getNumThreads();
- CV_EXPORTS int getThreadNum();
- CV_EXPORTS int64 getTickCount();
- CV_EXPORTS double getTickFrequency();
- CV_EXPORTS void* fastMalloc(size_t);
- CV_EXPORTS void fastFree(void* ptr);
- template<typename _Tp> static inline _Tp* allocate(size_t n)
- {
- _Tp* ptr = (_Tp*)fastMalloc(n*sizeof(ptr[0]));
- ::new(ptr) _Tp[n];
- return ptr;
- }
- template<typename _Tp> static inline void deallocate(_Tp* ptr, size_t n)
- {
- for( size_t i = 0; i < n; i++ ) (ptr+i)->~_Tp();
- fastFree(ptr);
- }
- template<typename _Tp> static inline _Tp* alignPtr(_Tp* ptr, int n=(int)sizeof(_Tp))
- {
- return (_Tp*)(((size_t)ptr + n-1) & -n);
- }
- static inline size_t alignSize(size_t sz, int n)
- {
- return (sz + n-1) & -n;
- }
- CV_EXPORTS void setUseOptimized(bool);
- CV_EXPORTS bool useOptimized();
- template<typename _Tp> class CV_EXPORTS Allocator
- {
- public:
- typedef _Tp value_type;
- typedef value_type* pointer;
- typedef const value_type* const_pointer;
- typedef value_type& reference;
- typedef const value_type& const_reference;
- typedef size_t size_type;
- typedef ptrdiff_t difference_type;
- template<typename U> class rebind { typedef Allocator<U> other; };
- explicit Allocator() {}
- ~Allocator() {}
- explicit Allocator(Allocator const&) {}
- template<typename U>
- explicit Allocator(Allocator<U> const&) {}
- // address
- pointer address(reference r) { return &r; }
- const_pointer address(const_reference r) { return &r; }
- pointer allocate(size_type count, const void* =0)
- { return reinterpret_cast<pointer>(fastMalloc(count * sizeof (_Tp))); }
- void deallocate(pointer p, size_type) {fastFree(p); }
- size_type max_size() const
- { return max(static_cast<_Tp>(-1)/sizeof(_Tp), 1); }
- void construct(pointer p, const _Tp& v) { new(static_cast<void*>(p)) _Tp(v); }
- void destroy(pointer p) { p->~_Tp(); }
- };
- /////////////////////// Vec (used as element of multi-channel images /////////////////////
- template<typename _Tp> class CV_EXPORTS DataDepth { public: enum { value = -1, fmt=(int)' ' }; };
- template<> class DataDepth<bool> { public: enum { value = CV_8U, fmt=(int)'u' }; };
- template<> class DataDepth<uchar> { public: enum { value = CV_8U, fmt=(int)'u' }; };
- template<> class DataDepth<schar> { public: enum { value = CV_8S, fmt=(int)'c' }; };
- template<> class DataDepth<ushort> { public: enum { value = CV_16U, fmt=(int)'w' }; };
- template<> class DataDepth<short> { public: enum { value = CV_16S, fmt=(int)'s' }; };
- template<> class DataDepth<int> { public: enum { value = CV_32S, fmt=(int)'i' }; };
- template<> class DataDepth<float> { public: enum { value = CV_32F, fmt=(int)'f' }; };
- template<> class DataDepth<double> { public: enum { value = CV_64F, fmt=(int)'d' }; };
- template<typename _Tp> class DataDepth<_Tp*> { public: enum { value = CV_USRTYPE1, fmt=(int)'r' }; };
- template<typename _Tp, int cn> class CV_EXPORTS Vec
- {
- public:
- typedef _Tp value_type;
- enum { depth = DataDepth<_Tp>::value, channels = cn, type = CV_MAKETYPE(depth, channels) };
- Vec();
- Vec(_Tp v0);
- Vec(_Tp v0, _Tp v1);
- Vec(_Tp v0, _Tp v1, _Tp v2);
- Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3);
- Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4);
- Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5);
- Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6);
- Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6, _Tp v7);
- Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6, _Tp v7, _Tp v8);
- Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6, _Tp v7, _Tp v8, _Tp v9);
- Vec(const Vec<_Tp, cn>& v);
- static Vec all(_Tp alpha);
- _Tp dot(const Vec& v) const;
- double ddot(const Vec& v) const;
- Vec cross(const Vec& v) const;
- template<typename T2> operator Vec<T2, cn>() const;
- operator CvScalar() const;
- _Tp operator [](int i) const;
- _Tp& operator[](int i);
- _Tp val[cn];
- };
- typedef Vec<uchar, 2> Vec2b;
- typedef Vec<uchar, 3> Vec3b;
- typedef Vec<uchar, 4> Vec4b;
- typedef Vec<short, 2> Vec2s;
- typedef Vec<short, 3> Vec3s;
- typedef Vec<short, 4> Vec4s;
- typedef Vec<ushort, 2> Vec2w;
- typedef Vec<ushort, 3> Vec3w;
- typedef Vec<ushort, 4> Vec4w;
- typedef Vec<int, 2> Vec2i;
- typedef Vec<int, 3> Vec3i;
- typedef Vec<int, 4> Vec4i;
- typedef Vec<float, 2> Vec2f;
- typedef Vec<float, 3> Vec3f;
- typedef Vec<float, 4> Vec4f;
- typedef Vec<float, 6> Vec6f;
- typedef Vec<double, 2> Vec2d;
- typedef Vec<double, 3> Vec3d;
- typedef Vec<double, 4> Vec4d;
- typedef Vec<double, 6> Vec6d;
- //////////////////////////////// Complex //////////////////////////////
- template<typename _Tp> class CV_EXPORTS Complex
- {
- public:
- Complex();
- Complex( _Tp _re, _Tp _im=0 );
- Complex( const std::complex<_Tp>& c );
- template<typename T2> operator Complex<T2>() const;
- Complex conj() const;
- operator std::complex<_Tp>() const;
- _Tp re, im;
- };
- typedef Complex<float> Complexf;
- typedef Complex<double> Complexd;
- //////////////////////////////// Point_ ////////////////////////////////
- template<typename _Tp> class CV_EXPORTS Point_
- {
- public:
- typedef _Tp value_type;
- Point_();
- Point_(_Tp _x, _Tp _y);
- Point_(const Point_& pt);
- Point_(const CvPoint& pt);
- Point_(const CvPoint2D32f& pt);
- Point_(const Size_<_Tp>& sz);
- Point_(const Vec<_Tp, 2>& v);
- Point_& operator = (const Point_& pt);
- template<typename _Tp2> operator Point_<_Tp2>() const;
- operator CvPoint() const;
- operator CvPoint2D32f() const;
- operator Vec<_Tp, 2>() const;
- _Tp dot(const Point_& pt) const;
- double ddot(const Point_& pt) const;
- bool inside(const Rect_<_Tp>& r) const;
- _Tp x, y;
- };
- template<typename _Tp> class CV_EXPORTS Point3_
- {
- public:
- typedef _Tp value_type;
- Point3_();
- Point3_(_Tp _x, _Tp _y, _Tp _z);
- Point3_(const Point3_& pt);
- explicit Point3_(const Point_<_Tp>& pt);
- Point3_(const CvPoint3D32f& pt);
- Point3_(const Vec<_Tp, 3>& v);
- Point3_& operator = (const Point3_& pt);
- template<typename _Tp2> operator Point3_<_Tp2>() const;
- operator CvPoint3D32f() const;
- operator Vec<_Tp, 3>() const;
- _Tp dot(const Point3_& pt) const;
- double ddot(const Point3_& pt) const;
- _Tp x, y, z;
- };
- //////////////////////////////// Size_ ////////////////////////////////
- template<typename _Tp> class CV_EXPORTS Size_
- {
- public:
- typedef _Tp value_type;
- Size_();
- Size_(_Tp _width, _Tp _height);
- Size_(const Size_& sz);
- Size_(const CvSize& sz);
- Size_(const CvSize2D32f& sz);
- Size_(const Point_<_Tp>& pt);
- Size_& operator = (const Size_& sz);
- _Tp area() const;
- template<typename _Tp2> operator Size_<_Tp2>() const;
- operator CvSize() const;
- operator CvSize2D32f() const;
- _Tp width, height;
- };
- //////////////////////////////// Rect_ ////////////////////////////////
- template<typename _Tp> class CV_EXPORTS Rect_
- {
- public:
- typedef _Tp value_type;
- Rect_();
- Rect_(_Tp _x, _Tp _y, _Tp _width, _Tp _height);
- Rect_(const Rect_& r);
- Rect_(const CvRect& r);
- Rect_(const Point_<_Tp>& org, const Size_<_Tp>& sz);
- Rect_(const Point_<_Tp>& pt1, const Point_<_Tp>& pt2);
- Rect_& operator = ( const Rect_& r );
- Point_<_Tp> tl() const;
- Point_<_Tp> br() const;
- Size_<_Tp> size() const;
- _Tp area() const;
- template<typename _Tp2> operator Rect_<_Tp2>() const;
- operator CvRect() const;
- bool contains(const Point_<_Tp>& pt) const;
- _Tp x, y, width, height;
- };
- typedef Point_<int> Point2i;
- typedef Point2i Point;
- typedef Size_<int> Size2i;
- typedef Size2i Size;
- typedef Rect_<int> Rect;
- typedef Point_<float> Point2f;
- typedef Point_<double> Point2d;
- typedef Size_<float> Size2f;
- typedef Point3_<int> Point3i;
- typedef Point3_<float> Point3f;
- typedef Point3_<double> Point3d;
- class CV_EXPORTS RotatedRect
- {
- public:
- RotatedRect();
- RotatedRect(const Point2f& _center, const Size2f& _size, float _angle);
- RotatedRect(const CvBox2D& box);
- void points(Point2f pts[]) const;
- Rect boundingRect() const;
- operator CvBox2D() const;
- Point2f center;
- Size2f size;
- float angle;
- };
- //////////////////////////////// Scalar_ ///////////////////////////////
- template<typename _Tp> class CV_EXPORTS Scalar_ : public Vec<_Tp, 4>
- {
- public:
- Scalar_();
- Scalar_(_Tp v0, _Tp v1, _Tp v2=0, _Tp v3=0);
- Scalar_(const CvScalar& s);
- Scalar_(_Tp v0);
- static Scalar_<_Tp> all(_Tp v0);
- operator CvScalar() const;
- template<typename T2> operator Scalar_<T2>() const;
- Scalar_<_Tp> mul(const Scalar_<_Tp>& t, double scale=1 ) const;
- template<typename T2> void convertTo(T2* buf, int channels, int unroll_to=0) const;
- };
- typedef Scalar_<double> Scalar;
- //////////////////////////////// Range /////////////////////////////////
- class CV_EXPORTS Range
- {
- public:
- Range();
- Range(int _start, int _end);
- Range(const CvSlice& slice);
- int size() const;
- bool empty() const;
- static Range all();
- operator CvSlice() const;
- int start, end;
- };
- /////////////////////////////// DataType ////////////////////////////////
- template<typename _Tp> class DataType
- {
- public:
- typedef _Tp value_type;
- typedef value_type work_type;
- typedef value_type channel_type;
- enum { depth = DataDepth<channel_type>::value, channels = 1,
- fmt=DataDepth<channel_type>::fmt,
- type = CV_MAKETYPE(depth, channels) };
- };
- template<> class DataType<bool>
- {
- public:
- typedef bool value_type;
- typedef int work_type;
- typedef value_type channel_type;
- enum { depth = DataDepth<channel_type>::value, channels = 1,
- fmt=DataDepth<channel_type>::fmt,
- type = CV_MAKETYPE(depth, channels) };
- };
- template<> class DataType<uchar>
- {
- public:
- typedef uchar value_type;
- typedef int work_type;
- typedef value_type channel_type;
- enum { depth = DataDepth<channel_type>::value, channels = 1,
- fmt=DataDepth<channel_type>::fmt,
- type = CV_MAKETYPE(depth, channels) };
- };
- template<> class DataType<schar>
- {
- public:
- typedef schar value_type;
- typedef int work_type;
- typedef value_type channel_type;
- enum { depth = DataDepth<channel_type>::value, channels = 1,
- fmt=DataDepth<channel_type>::fmt,
- type = CV_MAKETYPE(depth, channels) };
- };
- template<> class DataType<ushort>
- {
- public:
- typedef ushort value_type;
- typedef int work_type;
- typedef value_type channel_type;
- enum { depth = DataDepth<channel_type>::value, channels = 1,
- fmt=DataDepth<channel_type>::fmt,
- type = CV_MAKETYPE(depth, channels) };
- };
- template<> class DataType<short>
- {
- public:
- typedef short value_type;
- typedef int work_type;
- typedef value_type channel_type;
- enum { depth = DataDepth<channel_type>::value, channels = 1,
- fmt=DataDepth<channel_type>::fmt,
- type = CV_MAKETYPE(depth, channels) };
- };
- template<> class DataType<int>
- {
- public:
- typedef int value_type;
- typedef value_type work_type;
- typedef value_type channel_type;
- enum { depth = DataDepth<channel_type>::value, channels = 1,
- fmt=DataDepth<channel_type>::fmt,
- type = CV_MAKETYPE(depth, channels) };
- };
- template<> class DataType<float>
- {
- public:
- typedef float value_type;
- typedef value_type work_type;
- typedef value_type channel_type;
- enum { depth = DataDepth<channel_type>::value, channels = 1,
- fmt=DataDepth<channel_type>::fmt,
- type = CV_MAKETYPE(depth, channels) };
- };
- template<> class DataType<double>
- {
- public:
- typedef double value_type;
- typedef value_type work_type;
- typedef value_type channel_type;
- enum { depth = DataDepth<channel_type>::value, channels = 1,
- fmt=DataDepth<channel_type>::fmt,
- type = CV_MAKETYPE(depth, channels) };
- };
- template<typename _Tp, int cn> class DataType<Vec<_Tp, cn> >
- {
- public:
- typedef Vec<_Tp, cn> value_type;
- typedef Vec<typename DataType<_Tp>::work_type, cn> work_type;
- typedef _Tp channel_type;
- enum { depth = DataDepth<channel_type>::value, channels = cn,
- fmt = ((channels-1)<<8) + DataDepth<channel_type>::fmt,
- type = CV_MAKETYPE(depth, channels) };
- };
- template<typename _Tp> class DataType<std::complex<_Tp> >
- {
- public:
- typedef std::complex<_Tp> value_type;
- typedef value_type work_type;
- typedef _Tp channel_type;
- enum { depth = DataDepth<channel_type>::value, channels = 2,
- fmt = ((channels-1)<<8) + DataDepth<channel_type>::fmt,
- type = CV_MAKETYPE(depth, channels) };
- };
- template<typename _Tp> class DataType<Complex<_Tp> >
- {
- public:
- typedef Complex<_Tp> value_type;
- typedef value_type work_type;
- typedef _Tp channel_type;
- enum { depth = DataDepth<channel_type>::value, channels = 2,
- fmt = ((channels-1)<<8) + DataDepth<channel_type>::fmt,
- type = CV_MAKETYPE(depth, channels) };
- };
- template<typename _Tp> class DataType<Point_<_Tp> >
- {
- public:
- typedef Point_<_Tp> value_type;
- typedef Point_<typename DataType<_Tp>::work_type> work_type;
- typedef _Tp channel_type;
- enum { depth = DataDepth<channel_type>::value, channels = 2,
- fmt = ((channels-1)<<8) + DataDepth<channel_type>::fmt,
- type = CV_MAKETYPE(depth, channels) };
- };
- template<typename _Tp> class DataType<Point3_<_Tp> >
- {
- public:
- typedef Point3_<_Tp> value_type;
- typedef Point3_<typename DataType<_Tp>::work_type> work_type;
- typedef _Tp channel_type;
- enum { depth = DataDepth<channel_type>::value, channels = 3,
- fmt = ((channels-1)<<8) + DataDepth<channel_type>::fmt,
- type = CV_MAKETYPE(depth, channels) };
- };
- template<typename _Tp> class DataType<Size_<_Tp> >
- {
- public:
- typedef Size_<_Tp> value_type;
- typedef Size_<typename DataType<_Tp>::work_type> work_type;
- typedef _Tp channel_type;
- enum { depth = DataDepth<channel_type>::value, channels = 2,
- fmt = ((channels-1)<<8) + DataDepth<channel_type>::fmt,
- type = CV_MAKETYPE(depth, channels) };
- };
- template<typename _Tp> class DataType<Rect_<_Tp> >
- {
- public:
- typedef Rect_<_Tp> value_type;
- typedef Rect_<typename DataType<_Tp>::work_type> work_type;
- typedef _Tp channel_type;
- enum { depth = DataDepth<channel_type>::value, channels = 4,
- fmt = ((channels-1)<<8) + DataDepth<channel_type>::fmt,
- type = CV_MAKETYPE(depth, channels) };
- };
- template<typename _Tp> class DataType<Scalar_<_Tp> >
- {
- public:
- typedef Scalar_<_Tp> value_type;
- typedef Scalar_<typename DataType<_Tp>::work_type> work_type;
- typedef _Tp channel_type;
- enum { depth = DataDepth<channel_type>::value, channels = 4,
- fmt = ((channels-1)<<8) + DataDepth<channel_type>::fmt,
- type = CV_MAKETYPE(depth, channels) };
- };
- template<> class DataType<Range>
- {
- public:
- typedef Range value_type;
- typedef value_type work_type;
- typedef int channel_type;
- enum { depth = DataDepth<channel_type>::value, channels = 2,
- fmt = ((channels-1)<<8) + DataDepth<channel_type>::fmt,
- type = CV_MAKETYPE(depth, channels) };
- };
- //////////////////// Generic ref-counting pointer class for C/C++ objects ////////////////////////
- template<typename _Tp> class CV_EXPORTS Ptr
- {
- public:
- Ptr();
- Ptr(_Tp* _obj);
- ~Ptr();
- Ptr(const Ptr& ptr);
- Ptr& operator = (const Ptr& ptr);
- void addref();
- void release();
- void delete_obj();
- bool empty() const;
- _Tp* operator -> ();
- const _Tp* operator -> () const;
- operator _Tp* ();
- operator const _Tp*() const;
- protected:
- _Tp* obj;
- int* refcount;
- };
- //////////////////////////////// Mat ////////////////////////////////
- class Mat;
- template<typename M> class CV_EXPORTS MatExpr_Base_;
- typedef MatExpr_Base_<Mat> MatExpr_Base;
- template<typename E, typename M> class MatExpr_;
- template<typename A1, typename M, typename Op> class MatExpr_Op1_;
- template<typename A1, typename A2, typename M, typename Op> class MatExpr_Op2_;
- template<typename A1, typename A2, typename A3, typename M, typename Op> class MatExpr_Op3_;
- template<typename A1, typename A2, typename A3, typename A4,
- typename M, typename Op> class MatExpr_Op4_;
- template<typename A1, typename A2, typename A3, typename A4,
- typename A5, typename M, typename Op> class MatExpr_Op5_;
- template<typename M> class CV_EXPORTS MatOp_DivRS_;
- template<typename M> class CV_EXPORTS MatOp_Inv_;
- template<typename M> class CV_EXPORTS MatOp_MulDiv_;
- template<typename M> class CV_EXPORTS MatOp_Repeat_;
- template<typename M> class CV_EXPORTS MatOp_Set_;
- template<typename M> class CV_EXPORTS MatOp_Scale_;
- template<typename M> class CV_EXPORTS MatOp_T_;
- typedef MatExpr_<MatExpr_Op4_<Size, int, Scalar,
- int, Mat, MatOp_Set_<Mat> >, Mat> MatExpr_Initializer;
- template<typename _Tp> class MatIterator_;
- template<typename _Tp> class MatConstIterator_;
- enum { MAGIC_MASK=0xFFFF0000, TYPE_MASK=0x00000FFF, DEPTH_MASK=7 };
- static inline size_t getElemSize(int type) { return CV_ELEM_SIZE(type); }
- // matrix decomposition types
- enum { DECOMP_LU=0, DECOMP_SVD=1, DECOMP_EIG=2, DECOMP_CHOLESKY=3, DECOMP_QR=4, DECOMP_NORMAL=16 };
- enum { NORM_INF=1, NORM_L1=2, NORM_L2=4, NORM_TYPE_MASK=7, NORM_RELATIVE=8, NORM_MINMAX=32};
- enum { CMP_EQ=0, CMP_GT=1, CMP_GE=2, CMP_LT=3, CMP_LE=4, CMP_NE=5 };
- enum { GEMM_1_T=1, GEMM_2_T=2, GEMM_3_T=4 };
- enum { DFT_INVERSE=1, DFT_SCALE=2, DFT_ROWS=4, DFT_COMPLEX_OUTPUT=16, DFT_REAL_OUTPUT=32,
- DCT_INVERSE = DFT_INVERSE, DCT_ROWS=DFT_ROWS };
- class CV_EXPORTS Mat
- {
- public:
- // constructors
- Mat();
- // constructs matrix of the specified size and type
- // (_type is CV_8UC1, CV_64FC3, CV_32SC(12) etc.)
- Mat(int _rows, int _cols, int _type);
- Mat(Size _size, int _type);
- // constucts matrix and fills it with the specified value _s.
- Mat(int _rows, int _cols, int _type, const Scalar& _s);
- Mat(Size _size, int _type, const Scalar& _s);
- // copy constructor
- Mat(const Mat& m);
- // constructor for matrix headers pointing to user-allocated data
- Mat(int _rows, int _cols, int _type, void* _data, size_t _step=AUTO_STEP);
- Mat(Size _size, int _type, void* _data, size_t _step=AUTO_STEP);
- // creates a matrix header for a part of the bigger matrix
- Mat(const Mat& m, const Range& rowRange, const Range& colRange);
- Mat(const Mat& m, const Rect& roi);
- // converts old-style CvMat to the new matrix; the data is not copied by default
- Mat(const CvMat* m, bool copyData=false);
- // converts old-style IplImage to the new matrix; the data is not copied by default
- Mat(const IplImage* img, bool copyData=false);
- // builds matrix from std::vector with or without copying the data
- template<typename _Tp> Mat(const vector<_Tp>& vec, bool copyData=false);
- // helper constructor to compile matrix expressions
- Mat(const MatExpr_Base& expr);
- // destructor - calls release()
- ~Mat();
- // assignment operators
- Mat& operator = (const Mat& m);
- Mat& operator = (const MatExpr_Base& expr);
- operator MatExpr_<Mat, Mat>() const;
- // returns a new matrix header for the specified row
- Mat row(int y) const;
- // returns a new matrix header for the specified column
- Mat col(int x) const;
- // ... for the specified row span
- Mat rowRange(int startrow, int endrow) const;
- Mat rowRange(const Range& r) const;
- // ... for the specified column span
- Mat colRange(int startcol, int endcol) const;
- Mat colRange(const Range& r) const;
- // ... for the specified diagonal
- // (d=0 - the main diagonal,
- // >0 - a diagonal from the lower half,
- // <0 - a diagonal from the upper half)
- Mat diag(int d=0) const;
- // constructs a square diagonal matrix which main diagonal is vector "d"
- static Mat diag(const Mat& d);
- // returns deep copy of the matrix, i.e. the data is copied
- Mat clone() const;
- // copies the matrix content to "m".
- // It calls m.create(this->size(), this->type()).
- void copyTo( Mat& m ) const;
- // copies those matrix elements to "m" that are marked with non-zero mask elements.
- void copyTo( Mat& m, const Mat& mask ) const;
- // converts matrix to another datatype with optional scalng. See cvConvertScale.
- void convertTo( Mat& m, int rtype, double alpha=1, double beta=0 ) const;
- void assignTo( Mat& m, int type=-1 ) const;
- // sets every matrix element to s
- Mat& operator = (const Scalar& s);
- // sets some of the matrix elements to s, according to the mask
- Mat& setTo(const Scalar& s, const Mat& mask=Mat());
- // creates alternative matrix header for the same data, with different
- // number of channels and/or different number of rows. see cvReshape.
- Mat reshape(int _cn, int _rows=0) const;
- // matrix transposition by means of matrix expressions
- MatExpr_<MatExpr_Op2_<Mat, double, Mat, MatOp_T_<Mat> >, Mat>
- t() const;
- // matrix inversion by means of matrix expressions
- MatExpr_<MatExpr_Op2_<Mat, int, Mat, MatOp_Inv_<Mat> >, Mat>
- inv(int method=DECOMP_LU) const;
- MatExpr_<MatExpr_Op4_<Mat, Mat, double, char, Mat, MatOp_MulDiv_<Mat> >, Mat>
- // per-element matrix multiplication by means of matrix expressions
- mul(const Mat& m, double scale=1) const;
- MatExpr_<MatExpr_Op4_<Mat, Mat, double, char, Mat, MatOp_MulDiv_<Mat> >, Mat>
- mul(const MatExpr_<MatExpr_Op2_<Mat, double, Mat, MatOp_Scale_<Mat> >, Mat>& m, double scale=1) const;
- MatExpr_<MatExpr_Op4_<Mat, Mat, double, char, Mat, MatOp_MulDiv_<Mat> >, Mat>
- mul(const MatExpr_<MatExpr_Op2_<Mat, double, Mat, MatOp_DivRS_<Mat> >, Mat>& m, double scale=1) const;
- // computes cross-product of 2 3D vectors
- Mat cross(const Mat& m) const;
- // computes dot-product
- double dot(const Mat& m) const;
- // Matlab-style matrix initialization
- static MatExpr_Initializer zeros(int rows, int cols, int type);
- static MatExpr_Initializer zeros(Size size, int type);
- static MatExpr_Initializer ones(int rows, int cols, int type);
- static MatExpr_Initializer ones(Size size, int type);
- static MatExpr_Initializer eye(int rows, int cols, int type);
- static MatExpr_Initializer eye(Size size, int type);
- // allocates new matrix data unless the matrix already has specified size and type.
- // previous data is unreferenced if needed.
- void create(int _rows, int _cols, int _type);
- void create(Size _size, int _type);
- // increases the reference counter; use with care to avoid memleaks
- void addref();
- // decreases reference counter;
- // deallocate the data when reference counter reaches 0.
- void release();
- // locates matrix header within a parent matrix. See below
- void locateROI( Size& wholeSize, Point& ofs ) const;
- // moves/resizes the current matrix ROI inside the parent matrix.
- Mat& adjustROI( int dtop, int dbottom, int dleft, int dright );
- // extracts a rectangular sub-matrix
- // (this is a generalized form of row, rowRange etc.)
- Mat operator()( Range rowRange, Range colRange ) const;
- Mat operator()( const Rect& roi ) const;
- // converts header to CvMat; no data is copied
- operator CvMat() const;
- // converts header to IplImage; no data is copied
- operator IplImage() const;
- // returns true iff the matrix data is continuous
- // (i.e. when there are no gaps between successive rows).
- // similar to CV_IS_MAT_CONT(cvmat->type)
- bool isContinuous() const;
- // returns element size in bytes,
- // similar to CV_ELEM_SIZE(cvmat->type)
- size_t elemSize() const;
- // returns the size of element channel in bytes.
- size_t elemSize1() const;
- // returns element type, similar to CV_MAT_TYPE(cvmat->type)
- int type() const;
- // returns element type, similar to CV_MAT_DEPTH(cvmat->type)
- int depth() const;
- // returns element type, similar to CV_MAT_CN(cvmat->type)
- int channels() const;
- // returns step/elemSize1()
- size_t step1() const;
- // returns matrix size:
- // width == number of columns, height == number of rows
- Size size() const;
- // returns true if matrix data is NULL
- bool empty() const;
- // returns pointer to y-th row
- uchar* ptr(int y=0);
- const uchar* ptr(int y=0) const;
- // template version of the above method
- template<typename _Tp> _Tp* ptr(int y=0);
- template<typename _Tp> const _Tp* ptr(int y=0) const;
- // template methods for read-write or read-only element access.
- // note that _Tp must match the actual matrix type -
- // the functions do not do any on-fly type conversion
- template<typename _Tp> _Tp& at(int y, int x);
- template<typename _Tp> _Tp& at(Point pt);
- template<typename _Tp> const _Tp& at(int y, int x) const;
- template<typename _Tp> const _Tp& at(Point pt) const;
- // template methods for iteration over matrix elements.
- // the iterators take care of skipping gaps in the end of rows (if any)
- template<typename _Tp> MatIterator_<_Tp> begin();
- template<typename _Tp> MatIterator_<_Tp> end();
- template<typename _Tp> MatConstIterator_<_Tp> begin() const;
- template<typename _Tp> MatConstIterator_<_Tp> end() const;
- enum { MAGIC_VAL=0x42FF0000, AUTO_STEP=0, CONTINUOUS_FLAG=CV_MAT_CONT_FLAG };
- // includes several bit-fields:
- // * the magic signature
- // * continuity flag
- // * depth
- // * number of channels
- int flags;
- // the number of rows and columns
- int rows, cols;
- // a distance between successive rows in bytes; includes the gap if any
- size_t step;
- // pointer to the data
- uchar* data;
- // pointer to the reference counter;
- // when matrix points to user-allocated data, the pointer is NULL
- int* refcount;
- // helper fields used in locateROI and adjustROI
- uchar* datastart;
- uchar* dataend;
- };
- // Multiply-with-Carry RNG
- class CV_EXPORTS RNG
- {
- public:
- enum { A=4164903690U, UNIFORM=0, NORMAL=1 };
- RNG();
- RNG(uint64 _state);
- unsigned next();
- operator uchar();
- operator schar();
- operator ushort();
- operator short();
- operator unsigned();
- operator int();
- operator float();
- operator double();
- int uniform(int a, int b);
- float uniform(float a, float b);
- double uniform(double a, double b);
- void fill( Mat& mat, int distType, const Scalar& a, const Scalar& b );
- uint64 state;
- };
- class CV_EXPORTS TermCriteria
- {
- public:
- enum { COUNT=1, MAX_ITER=COUNT, EPS=2 };
- TermCriteria();
- TermCriteria(int _type, int _maxCount, double _epsilon);
- TermCriteria(const CvTermCriteria& criteria);
- operator CvTermCriteria() const;
- int type;
- int maxCount;
- double epsilon;
- };
- CV_EXPORTS Mat cvarrToMat(const CvArr* arr, bool copyData=false, bool allowND=true, int coiMode=0);
- CV_EXPORTS void extractImageCOI(const CvArr* arr, Mat& coiimg, int coi=-1);
- CV_EXPORTS void insertImageCOI(const Mat& coiimg, CvArr* arr, int coi=-1);
- CV_EXPORTS void add(const Mat& a, const Mat& b, Mat& c, const Mat& mask);
- CV_EXPORTS void subtract(const Mat& a, const Mat& b, Mat& c, const Mat& mask);
- CV_EXPORTS void add(const Mat& a, const Mat& b, Mat& c);
- CV_EXPORTS void subtract(const Mat& a, const Mat& b, Mat& c);
- CV_EXPORTS void add(const Mat& a, const Scalar& s, Mat& c, const Mat& mask=Mat());
- CV_EXPORTS void subtract(const Mat& a, const Scalar& s, Mat& c, const Mat& mask=Mat());
- CV_EXPORTS void multiply(const Mat& a, const Mat& b, Mat& c, double scale=1);
- CV_EXPORTS void divide(const Mat& a, const Mat& b, Mat& c, double scale=1);
- CV_EXPORTS void divide(double scale, const Mat& b, Mat& c);
- CV_EXPORTS void subtract(const Scalar& s, const Mat& a, Mat& c, const Mat& mask=Mat());
- CV_EXPORTS void scaleAdd(const Mat& a, double alpha, const Mat& b, Mat& c);
- CV_EXPORTS void addWeighted(const Mat& a, double alpha, const Mat& b,
- double beta, double gamma, Mat& c);
- CV_EXPORTS void convertScaleAbs(const Mat& a, Mat& c, double alpha=1, double beta=0);
- CV_EXPORTS void LUT(const Mat& a, const Mat& lut, Mat& b);
- CV_EXPORTS Scalar sum(const Mat& m);
- CV_EXPORTS int countNonZero( const Mat& m );
- CV_EXPORTS Scalar mean(const Mat& m);
- CV_EXPORTS Scalar mean(const Mat& m, const Mat& mask);
- CV_EXPORTS void meanStdDev(const Mat& m, Scalar& mean, Scalar& stddev, const Mat& mask=Mat());
- CV_EXPORTS double norm(const Mat& a, int normType=NORM_L2);
- CV_EXPORTS double norm(const Mat& a, const Mat& b, int normType=NORM_L2);
- CV_EXPORTS double norm(const Mat& a, int normType, const Mat& mask);
- CV_EXPORTS double norm(const Mat& a, const Mat& b,
- int normType, const Mat& mask);
- CV_EXPORTS void normalize( const Mat& a, Mat& b, double alpha=1, double beta=0,
- int norm_type=NORM_L2, int rtype=-1, const Mat& mask=Mat());
- CV_EXPORTS void minMaxLoc(const Mat& a, double* minVal,
- double* maxVal=0, Point* minLoc=0,
- Point* maxLoc=0, const Mat& mask=Mat());
- CV_EXPORTS void reduce(const Mat& m, Mat& dst, int dim, int rtype, int dtype=-1);
- CV_EXPORTS void merge(const Mat* mv, size_t count, Mat& dst);
- CV_EXPORTS void split(const Mat& m, Mat* mvbegin);
- CV_EXPORTS void mixChannels(const Mat* src, int nsrcs, Mat* dst, int ndsts,
- const int* fromTo, size_t npairs);
- CV_EXPORTS void flip(const Mat& a, Mat& b, int flipCode);
- CV_EXPORTS void repeat(const Mat& a, int ny, int nx, Mat& b);
- static inline Mat repeat(const Mat& src, int ny, int nx)
- {
- if( nx == 1 && ny == 1 ) return src;
- Mat dst; repeat(src, ny, nx, dst); return dst;
- }
- CV_EXPORTS void bitwise_and(const Mat& a, const Mat& b, Mat& c, const Mat& mask=Mat());
- CV_EXPORTS void bitwise_or(const Mat& a, const Mat& b, Mat& c, const Mat& mask=Mat());
- CV_EXPORTS void bitwise_xor(const Mat& a, const Mat& b, Mat& c, const Mat& mask=Mat());
- CV_EXPORTS void bitwise_and(const Mat& a, const Scalar& s, Mat& c, const Mat& mask=Mat());
- CV_EXPORTS void bitwise_or(const Mat& a, const Scalar& s, Mat& c, const Mat& mask=Mat());
- CV_EXPORTS void bitwise_xor(const Mat& a, const Scalar& s, Mat& c, const Mat& mask=Mat());
- CV_EXPORTS void bitwise_not(const Mat& a, Mat& c);
- CV_EXPORTS void absdiff(const Mat& a, const Mat& b, Mat& c);
- CV_EXPORTS void absdiff(const Mat& a, const Scalar& s, Mat& c);
- CV_EXPORTS void inRange(const Mat& src, const Mat& lowerb,
- const Mat& upperb, Mat& dst);
- CV_EXPORTS void inRange(const Mat& src, const Scalar& lowerb,
- const Scalar& upperb, Mat& dst);
- CV_EXPORTS void compare(const Mat& a, const Mat& b, Mat& c, int cmpop);
- CV_EXPORTS void compare(const Mat& a, double s, Mat& c, int cmpop);
- CV_EXPORTS void min(const Mat& a, const Mat& b, Mat& c);
- CV_EXPORTS void min(const Mat& a, double alpha, Mat& c);
- CV_EXPORTS void max(const Mat& a, const Mat& b, Mat& c);
- CV_EXPORTS void max(const Mat& a, double alpha, Mat& c);
- CV_EXPORTS void sqrt(const Mat& a, Mat& b);
- CV_EXPORTS void pow(const Mat& a, double power, Mat& b);
- CV_EXPORTS void exp(const Mat& a, Mat& b);
- CV_EXPORTS void log(const Mat& a, Mat& b);
- CV_EXPORTS float cubeRoot(float val);
- CV_EXPORTS float fastAtan2(float y, float x);
- CV_EXPORTS void polarToCart(const Mat& magnitude, const Mat& angle,
- Mat& x, Mat& y, bool angleInDegrees=false);
- CV_EXPORTS void cartToPolar(const Mat& x, const Mat& y,
- Mat& magnitude, Mat& angle,
- bool angleInDegrees=false);
- CV_EXPORTS void phase(const Mat& x, const Mat& y, Mat& angle,
- bool angleInDegrees=false);
- CV_EXPORTS void magnitude(const Mat& x, const Mat& y, Mat& magnitude);
- CV_EXPORTS bool checkRange(const Mat& a, bool quiet=true, Point* pt=0,
- double minVal=-DBL_MAX, double maxVal=DBL_MAX);
- CV_EXPORTS void gemm(const Mat& a, const Mat& b, double alpha,
- const Mat& c, double gamma, Mat& d, int flags=0);
- CV_EXPORTS void mulTransposed( const Mat& a, Mat& c, bool aTa,
- const Mat& delta=Mat(),
- double scale=1, int rtype=-1 );
- CV_EXPORTS void transpose(const Mat& a, Mat& b);
- CV_EXPORTS void transform(const Mat& src, Mat& dst, const Mat& m );
- CV_EXPORTS void perspectiveTransform(const Mat& src, Mat& dst, const Mat& m );
- CV_EXPORTS void completeSymm(Mat& a, bool lowerToUpper=false);
- CV_EXPORTS void setIdentity(Mat& c, const Scalar& s=Scalar(1));
- CV_EXPORTS double determinant(const Mat& m);
- CV_EXPORTS Scalar trace(const Mat& m);
- CV_EXPORTS double invert(const Mat& a, Mat& c, int flags=DECOMP_LU);
- CV_EXPORTS bool solve(const Mat& a, const Mat& b, Mat& x, int flags=DECOMP_LU);
- CV_EXPORTS void sort(const Mat& a, Mat& b, int flags);
- CV_EXPORTS void sortIdx(const Mat& a, Mat& b, int flags);
- CV_EXPORTS void solveCubic(const Mat& coeffs, Mat& roots);
- CV_EXPORTS void solvePoly(const Mat& coeffs, Mat& roots, int maxIters=20, int fig=100);
- CV_EXPORTS bool eigen(const Mat& a, Mat& eigenvalues, int lowindex=-1,
- int highindex=-1);
- CV_EXPORTS bool eigen(const Mat& a, Mat& eigenvalues, Mat& eigenvectors,
- int lowindex=-1, int highindex=-1);
- //CV_EXPORTS bool selectedeigen(const Mat& a, Mat& eigenvalues, int lowindex,
- // int highindex);
- //CV_EXPORTS bool selectedeigen(const Mat& a, Mat& eigenvalues,
- // Mat& eigenvectors, int lowindex, int highindex);
- CV_EXPORTS void calcCovarMatrix( const Mat* samples, int nsamples,
- Mat& covar, Mat& mean,
- int flags, int ctype=CV_64F);
- CV_EXPORTS void calcCovarMatrix( const Mat& samples, Mat& covar, Mat& mean,
- int flags, int ctype=CV_64F);
- class CV_EXPORTS PCA
- {
- public:
- PCA();
- PCA(const Mat& data, const Mat& mean, int flags, int maxComponents=0);
- PCA& operator()(const Mat& data, const Mat& mean, int flags, int maxComponents=0);
- Mat project(const Mat& vec) const;
- void project(const Mat& vec, Mat& result) const;
- Mat backProject(const Mat& vec) const;
- void backProject(const Mat& vec, Mat& result) const;
- Mat eigenvectors;
- Mat eigenvalues;
- Mat mean;
- };
- class CV_EXPORTS SVD
- {
- public:
- enum { MODIFY_A=1, NO_UV=2, FULL_UV=4 };
- SVD();
- SVD( const Mat& m, int flags=0 );
- SVD& operator ()( const Mat& m, int flags=0 );
- static void solveZ( const Mat& m, Mat& dst );
- void backSubst( const Mat& rhs, Mat& dst ) const;
- Mat u, w, vt;
- };
- CV_EXPORTS double Mahalanobis(const Mat& v1, const Mat& v2, const Mat& icovar);
- static inline double Mahalonobis(const Mat& v1, const Mat& v2, const Mat& icovar)
- { return Mahalanobis(v1, v2, icovar); }
- CV_EXPORTS void dft(const Mat& src, Mat& dst, int flags=0, int nonzeroRows=0);
- CV_EXPORTS void idft(const Mat& src, Mat& dst, int flags=0, int nonzeroRows=0);
- CV_EXPORTS void dct(const Mat& src, Mat& dst, int flags=0);
- CV_EXPORTS void idct(const Mat& src, Mat& dst, int flags=0);
- CV_EXPORTS void mulSpectrums(const Mat& a, const Mat& b, Mat& c,
- int flags, bool conjB=false);
- CV_EXPORTS int getOptimalDFTSize(int vecsize);
- enum { KMEANS_RANDOM_CENTERS=0, KMEANS_PP_CENTERS=2, KMEANS_USE_INITIAL_LABELS=1 };
- CV_EXPORTS double kmeans( const Mat& data, int K, Mat& best_labels,
- TermCriteria criteria, int attempts,
- int flags, Mat* centers );
- CV_EXPORTS RNG& theRNG();
- template<typename _Tp> static inline _Tp randu() { return (_Tp)theRNG(); }
- static inline void randu(Mat& dst, const Scalar& low, const Scalar& high)
- { theRNG().fill(dst, RNG::UNIFORM, low, high); }
- static inline void randn(Mat& dst, const Scalar& mean, const Scalar& stddev)
- { theRNG().fill(dst, RNG::NORMAL, mean, stddev); }
- CV_EXPORTS void randShuffle(Mat& dst, double iterFactor=1., RNG* rng=0);
- CV_EXPORTS void line(Mat& img, Point pt1, Point pt2, const Scalar& color,
- int thickness=1, int lineType=8, int shift=0);
- CV_EXPORTS void rectangle(Mat& img, Point pt1, Point pt2,
- const Scalar& color, int thickness=1,
- int lineType=8, int shift=0);
- CV_EXPORTS void circle(Mat& img, Point center, int radius,
- const Scalar& color, int thickness=1,
- int lineType=8, int shift=0);
- CV_EXPORTS void ellipse(Mat& img, Point center, Size axes,
- double angle, double startAngle, double endAngle,
- const Scalar& color, int thickness=1,
- int lineType=8, int shift=0);
- CV_EXPORTS void ellipse(Mat& img, const RotatedRect& box, const Scalar& color,
- int thickness=1, int lineType=8);
- CV_EXPORTS void fillConvexPoly(Mat& img, const Point* pts, int npts,
- const Scalar& color, int lineType=8,
- int shift=0);
- CV_EXPORTS void fillPoly(Mat& img, const Point** pts, const int* npts, int ncontours,
- const Scalar& color, int lineType=8, int shift=0,
- Point offset=Point() );
- CV_EXPORTS void polylines(Mat& img, const Point** pts, const int* npts, int ncontours, bool isClosed,
- const Scalar& color, int thickness=1, int lineType=8, int shift=0 );
- CV_EXPORTS bool clipLine(Size imgSize, Point& pt1, Point& pt2);
- CV_EXPORTS bool clipLine(Rect img_rect, Point& pt1, Point& pt2);
- class CV_EXPORTS LineIterator
- {
- public:
- LineIterator(const Mat& img, Point pt1, Point pt2,
- int connectivity=8, bool leftToRight=false);
- uchar* operator *();
- LineIterator& operator ++();
- LineIterator operator ++(int);
- uchar* ptr;
- int err, count;
- int minusDelta, plusDelta;
- int minusStep, plusStep;
- };
- CV_EXPORTS void ellipse2Poly( Point center, Size axes, int angle,
- int arcStart, int arcEnd, int delta, vector<Point>& pts );
- enum
- {
- FONT_HERSHEY_SIMPLEX = 0,
- FONT_HERSHEY_PLAIN = 1,
- FONT_HERSHEY_DUPLEX = 2,
- FONT_HERSHEY_COMPLEX = 3,
- FONT_HERSHEY_TRIPLEX = 4,
- FONT_HERSHEY_COMPLEX_SMALL = 5,
- FONT_HERSHEY_SCRIPT_SIMPLEX = 6,
- FONT_HERSHEY_SCRIPT_COMPLEX = 7,
- FONT_ITALIC = 16
- };
- CV_EXPORTS void putText( Mat& img, const string& text, Point org,
- int fontFace, double fontScale, Scalar color,
- int thickness=1, int linetype=8,
- bool bottomLeftOrigin=false );
- CV_EXPORTS Size getTextSize(const string& text, int fontFace,
- double fontScale, int thickness,
- int* baseLine);
- ///////////////////////////////// Mat_<_Tp> ////////////////////////////////////
- template<typename _Tp> class CV_EXPORTS Mat_ : public Mat
- {
- public:
- typedef _Tp value_type;
- typedef typename DataType<_Tp>::channel_type channel_type;
- typedef MatIterator_<_Tp> iterator;
- typedef MatConstIterator_<_Tp> const_iterator;
- Mat_();
- // equivalent to Mat(_rows, _cols, DataType<_Tp>::type)
- Mat_(int _rows, int _cols);
- // other forms of the above constructor
- Mat_(int _rows, int _cols, const _Tp& value);
- explicit Mat_(Size _size);
- Mat_(Size _size, const _Tp& value);
- // copy/conversion contructor. If m is of different type, it's converted
- Mat_(const Mat& m);
- // copy constructor
- Mat_(const Mat_& m);
- // construct a matrix on top of user-allocated data.
- // step is in bytes(!!!), regardless of the type
- Mat_(int _rows, int _cols, _Tp* _data, size_t _step=AUTO_STEP);
- // minor selection
- Mat_(const Mat_& m, const Range& rowRange, const Range& colRange);
- Mat_(const Mat_& m, const Rect& roi);
- // to support complex matrix expressions
- Mat_(const MatExpr_Base& expr);
- // makes a matrix out of Vec or std::vector. The matrix will have a single column
- template<int n> explicit Mat_(const Vec<_Tp, n>& vec);
- Mat_(const vector<_Tp>& vec, bool copyData=false);
- Mat_& operator = (const Mat& m);
- Mat_& operator = (const Mat_& m);
- // set all the elements to s.
- Mat_& operator = (const _Tp& s);
- // iterators; they are smart enough to skip gaps in the end of rows
- iterator begin();
- iterator end();
- const_iterator begin() const;
- const_iterator end() const;
- // equivalent to Mat::create(_rows, _cols, DataType<_Tp>::type)
- void create(int _rows, int _cols);
- void create(Size _size);
- // cross-product
- Mat_ cross(const Mat_& m) const;
- // to support complex matrix expressions
- Mat_& operator = (const MatExpr_Base& expr);
- // data type conversion
- template<typename T2> operator Mat_<T2>() const;
- // overridden forms of Mat::row() etc.
- Mat_ row(int y) const;
- Mat_ col(int x) const;
- Mat_ diag(int d=0) const;
- Mat_ clone() const;
- // transposition, inversion, per-element multiplication
- MatExpr_<MatExpr_Op2_<Mat_, double, Mat_, MatOp_T_<Mat> >, Mat_> t() const;
- MatExpr_<MatExpr_Op2_<Mat_, int, Mat_, MatOp_Inv_<Mat> >, Mat_> inv(int method=DECOMP_LU) const;
- MatExpr_<MatExpr_Op4_<Mat_, Mat_, double, char, Mat_, MatOp_MulDiv_<Mat> >, Mat_>
- mul(const Mat_& m, double scale=1) const;
- MatExpr_<MatExpr_Op4_<Mat_, Mat_, double, char, Mat_, MatOp_MulDiv_<Mat> >, Mat_>
- mul(const MatExpr_<MatExpr_Op2_<Mat_, double, Mat_,
- MatOp_Scale_<Mat> >, Mat_>& m, double scale=1) const;
- MatExpr_<MatExpr_Op4_<Mat_, Mat_, double, char, Mat_, MatOp_MulDiv_<Mat> >, Mat_>
- mul(const MatExpr_<MatExpr_Op2_<Mat_, double, Mat_,
- MatOp_DivRS_<Mat> >, Mat_>& m, double scale=1) const;
- // overridden forms of Mat::elemSize() etc.
- size_t elemSize() const;
- size_t elemSize1() const;
- int type() const;
- int depth() const;
- int channels() const;
- size_t step1() const;
- // returns step()/sizeof(_Tp)
- size_t stepT() const;
- // overridden forms of Mat::zeros() etc. Data type is omitted, of course
- static MatExpr_Initializer zeros(int rows, int cols);
- static MatExpr_Initializer zeros(Size size);
- static MatExpr_Initializer ones(int rows, int cols);
- static MatExpr_Initializer ones(Size size);
- static MatExpr_Initializer eye(int rows, int cols);
- static MatExpr_Initializer eye(Size size);
- // some more overriden methods
- Mat_ reshape(int _rows) const;
- Mat_& adjustROI( int dtop, int dbottom, int dleft, int dright );
- Mat_ operator()( const Range& rowRange, const Range& colRange ) const;
- Mat_ operator()( const Rect& roi ) const;
- // more convenient forms of row and element access operators
- _Tp* operator [](int y);
- const _Tp* operator [](int y) const;
- _Tp& operator ()(int row, int col);
- const _Tp& operator ()(int row, int col) const;
- _Tp& operator ()(Point pt);
- const _Tp& operator ()(Point pt) const;
- // to support matrix expressions
- operator MatExpr_<Mat_, Mat_>() const;
- // conversion to vector.
- operator vector<_Tp>() const;
- };
- //////////// Iterators & Comma initializers //////////////////
- template<typename _Tp>
- class CV_EXPORTS MatConstIterator_
- {
- public:
- typedef _Tp value_type;
- typedef int difference_type;
- MatConstIterator_();
- MatConstIterator_(const Mat_<_Tp>* _m);
- MatConstIterator_(const Mat_<_Tp>* _m, int _row, int _col=0);
- MatConstIterator_(const Mat_<_Tp>* _m, Point _pt);
- MatConstIterator_(const MatConstIterator_& it);
- MatConstIterator_& operator = (const MatConstIterator_& it );
- _Tp operator *() const;
- _Tp operator [](int i) const;
- MatConstIterator_& operator += (int ofs);
- MatConstIterator_& operator -= (int ofs);
- MatConstIterator_& operator --();
- MatConstIterator_ operator --(int);
- MatConstIterator_& operator ++();
- MatConstIterator_ operator ++(int);
- Point pos() const;
- const Mat_<_Tp>* m;
- _Tp* ptr;
- _Tp* sliceEnd;
- };
- template<typename _Tp>
- class CV_EXPORTS MatIterator_ : public MatConstIterator_<_Tp>
- {
- public:
- typedef _Tp* pointer;
- typedef _Tp& reference;
- typedef std::random_access_iterator_tag iterator_category;
- MatIterator_();
- MatIterator_(Mat_<_Tp>* _m);
- MatIterator_(Mat_<_Tp>* _m, int _row, int _col=0);
- MatIterator_(const Mat_<_Tp>* _m, Point _pt);
- MatIterator_(const MatIterator_& it);
- MatIterator_& operator = (const MatIterator_<_Tp>& it );
- _Tp& operator *() const;
- _Tp& operator [](int i) const;
- MatIterator_& operator += (int ofs);
- MatIterator_& operator -= (int ofs);
- MatIterator_& operator --();
- MatIterator_ operator --(int);
- MatIterator_& operator ++();
- MatIterator_ operator ++(int);
- };
- template<typename _Tp> class CV_EXPORTS MatOp_Iter_;
- template<typename _Tp> class CV_EXPORTS MatCommaInitializer_ :
- public MatExpr_<MatExpr_Op1_<MatIterator_<_Tp>, Mat_<_Tp>, MatOp_Iter_<_Tp> >, Mat_<_Tp> >
- {
- public:
- MatCommaInitializer_(Mat_<_Tp>* _m);
- template<typename T2> MatCommaInitializer_<_Tp>& operator , (T2 v);
- operator Mat_<_Tp>() const;
- Mat_<_Tp> operator *() const;
- void assignTo(Mat& m, int type=-1) const;
- };
- #if 0
- template<typename _Tp> class VectorCommaInitializer_
- {
- public:
- VectorCommaInitializer_(vector<_Tp>* _vec);
- template<typename T2> VectorCommaInitializer_<_Tp>& operator , (T2 val);
- operator vector<_Tp>() const;
- vector<_Tp> operator *() const;
- vector<_Tp>* vec;
- int idx;
- };
- #endif
- template<typename _Tp, size_t fixed_size=4096/sizeof(_Tp)+8> class CV_EXPORTS AutoBuffer
- {
- public:
- typedef _Tp value_type;
- AutoBuffer();
- AutoBuffer(size_t _size);
- ~AutoBuffer();
- void allocate(size_t _size);
- void deallocate();
- operator _Tp* ();
- operator const _Tp* () const;
- protected:
- _Tp* ptr;
- size_t size;
- _Tp buf[fixed_size];
- };
- /////////////////////////// multi-dimensional dense matrix //////////////////////////
- class MatND;
- class SparseMat;
- class CV_EXPORTS MatND
- {
- public:
- // default constructor
- MatND();
- // constructs array with specific size and data type
- MatND(int _ndims, const int* _sizes, int _type);
- // constructs array and fills it with the specified value
- MatND(int _ndims, const int* _sizes, int _type, const Scalar& _s);
- // copy constructor. only the header is copied.
- MatND(const MatND& m);
- // sub-array selection. only the header is copied
- MatND(const MatND& m, const Range* ranges);
- // converts old-style nd array to MatND; optionally, copies the data
- MatND(const CvMatND* m, bool copyData=false);
- ~MatND();
- MatND& operator = (const MatND& m);
- void assignTo( MatND& m, int type ) const;
- // creates a complete copy of the matrix (all the data is copied)
- MatND clone() const;
- // sub-array selection; only the header is copied
- MatND operator()(const Range* ranges) const;
- // copies the data to another matrix.
- // Calls m.create(this->size(), this->type()) prior to
- // copying the data
- void copyTo( MatND& m ) const;
- // copies only the selected elements to another matrix.
- void copyTo( MatND& m, const MatND& mask ) const;
- // converts data to the specified data type.
- // calls m.create(this->size(), rtype) prior to the conversion
- void convertTo( MatND& m, int rtype, double alpha=1, double beta=0 ) const;
- // assigns "s" to each array element.
- MatND& operator = (const Scalar& s);
- // assigns "s" to the selected elements of array
- // (or to all the elements if mask==MatND())
- MatND& setTo(const Scalar& s, const MatND& mask=MatND());
- // modifies geometry of array without copying the data
- MatND reshape(int _newcn, int _newndims=0, const int* _newsz=0) const;
- // allocates a new buffer for the data unless the current one already
- // has the specified size and type.
- void create(int _ndims, const int* _sizes, int _type);
- // manually increment reference counter (use with care !!!)
- void addref();
- // decrements the reference counter. Dealloctes the data when
- // the reference counter reaches zero.
- void release();
- // converts the matrix to 2D Mat or to the old-style CvMatND.
- // In either case the data is not copied.
- operator Mat() const;
- operator CvMatND() const;
- // returns true if the array data is stored continuously
- bool isContinuous() const;
- // returns size of each element in bytes
- size_t elemSize() const;
- // returns size of each element channel in bytes
- size_t elemSize1() const;
- // returns OpenCV data type id (CV_8UC1, ... CV_64FC4,...)
- int type() const;
- // returns depth (CV_8U ... CV_64F)
- int depth() const;
- // returns the number of channels
- int channels() const;
- // step1() ~ step()/elemSize1()
- size_t step1(int i) const;
- // return pointer to the element (versions for 1D, 2D, 3D and generic nD cases)
- uchar* ptr(int i0);
- const uchar* ptr(int i0) const;
- uchar* ptr(int i0, int i1);
- const uchar* ptr(int i0, int i1) const;
- uchar* ptr(int i0, int i1, int i2);
- const uchar* ptr(int i0, int i1, int i2) const;
- uchar* ptr(const int* idx);
- const uchar* ptr(const int* idx) const;
- // convenient template methods for element access.
- // note that _Tp must match the actual matrix type -
- // the functions do not do any on-fly type conversion
- template<typename _Tp> _Tp& at(int i0);
- template<typename _Tp> const _Tp& at(int i0) const;
- template<typename _Tp> _Tp& at(int i0, int i1);
- template<typename _Tp> const _Tp& at(int i0, int i1) const;
- template<typename _Tp> _Tp& at(int i0, int i1, int i2);
- template<typename _Tp> const _Tp& at(int i0, int i1, int i2) const;
- template<typename _Tp> _Tp& at(const int* idx);
- template<typename _Tp> const _Tp& at(const int* idx) const;
- enum { MAGIC_VAL=0x42FE0000, AUTO_STEP=-1,
- CONTINUOUS_FLAG=CV_MAT_CONT_FLAG, MAX_DIM=CV_MAX_DIM };
- // combines data type, continuity flag, signature (magic value)
- int flags;
- // the array dimensionality
- int dims;
- // data reference counter
- int* refcount;
- // pointer to the data
- uchar* data;
- // and its actual beginning and end
- uchar* datastart;
- uchar* dataend;
- // step and size for each dimension, MAX_DIM at max
- int size[MAX_DIM];
- size_t step[MAX_DIM];
- };
- class CV_EXPORTS NAryMatNDIterator
- {
- public:
- NAryMatNDIterator();
- NAryMatNDIterator(const MatND* arrays, size_t count);
- NAryMatNDIterator(const MatND** arrays, size_t count);
- NAryMatNDIterator(const MatND& m1);
- NAryMatNDIterator(const MatND& m1, const MatND& m2);
- NAryMatNDIterator(const MatND& m1, const MatND& m2, const MatND& m3);
- NAryMatNDIterator(const MatND& m1, const MatND& m2, const MatND& m3, const MatND& m4);
- NAryMatNDIterator(const MatND& m1, const MatND& m2, const MatND& m3,
- const MatND& m4, const MatND& m5);
- NAryMatNDIterator(const MatND& m1, const MatND& m2, const MatND& m3,
- const MatND& m4, const MatND& m5, const MatND& m6);
- void init(const MatND** arrays, size_t count);
- NAryMatNDIterator& operator ++();
- NAryMatNDIterator operator ++(int);
- vector<MatND> arrays;
- vector<Mat> planes;
- int nplanes;
- protected:
- int iterdepth, idx;
- };
- CV_EXPORTS void add(const MatND& a, const MatND& b, MatND& c, const MatND& mask);
- CV_EXPORTS void subtract(const MatND& a, const MatND& b, MatND& c, const MatND& mask);
- CV_EXPORTS void add(const MatND& a, const MatND& b, MatND& c);
- CV_EXPORTS void subtract(const MatND& a, const MatND& b, MatND& c);
- CV_EXPORTS void add(const MatND& a, const Scalar& s, MatND& c, const MatND& mask=MatND());
- CV_EXPORTS void multiply(const MatND& a, const MatND& b, MatND& c, double scale=1);
- CV_EXPORTS void divide(const MatND& a, const MatND& b, MatND& c, double scale=1);
- CV_EXPORTS void divide(double scale, const MatND& b, MatND& c);
- CV_EXPORTS void subtract(const Scalar& s, const MatND& a, MatND& c, const MatND& mask=MatND());
- CV_EXPORTS void scaleAdd(const MatND& a, double alpha, const MatND& b, MatND& c);
- CV_EXPORTS void addWeighted(const MatND& a, double alpha, const MatND& b,
- double beta, double gamma, MatND& c);
- CV_EXPORTS Scalar sum(const MatND& m);
- CV_EXPORTS int countNonZero( const MatND& m );
- CV_EXPORTS Scalar mean(const MatND& m);
- CV_EXPORTS Scalar mean(const MatND& m, const MatND& mask);
- CV_EXPORTS void meanStdDev(const MatND& m, Scalar& mean, Scalar& stddev, const MatND& mask=MatND());
- CV_EXPORTS double norm(const MatND& a, int normType=NORM_L2, const MatND& mask=MatND());
- CV_EXPORTS double norm(const MatND& a, const MatND& b,
- int normType=NORM_L2, const MatND& mask=MatND());
- CV_EXPORTS void normalize( const MatND& a, MatND& b, double alpha=1, double beta=0,
- int norm_type=NORM_L2, int rtype=-1, const MatND& mask=MatND());
- CV_EXPORTS void minMaxLoc(const MatND& a, double* minVal,
- double* maxVal, int* minIdx=0, int* maxIdx=0,
- const MatND& mask=MatND());
- CV_EXPORTS void merge(const MatND* mvbegin, size_t count, MatND& dst);
- CV_EXPORTS void split(const MatND& m, MatND* mv);
- CV_EXPORTS void mixChannels(const MatND* src, int nsrcs, MatND* dst, int ndsts,
- const int* fromTo, size_t npairs);
- CV_EXPORTS void bitwise_and(const MatND& a, const MatND& b, MatND& c, const MatND& mask=MatND());
- CV_EXPORTS void bitwise_or(const MatND& a, const MatND& b, MatND& c, const MatND& mask=MatND());
- CV_EXPORTS void bitwise_xor(const MatND& a, const MatND& b, MatND& c, const MatND& mask=MatND());
- CV_EXPORTS void bitwise_and(const MatND& a, const Scalar& s, MatND& c, const MatND& mask=MatND());
- CV_EXPORTS void bitwise_or(const MatND& a, const Scalar& s, MatND& c, const MatND& mask=MatND());
- CV_EXPORTS void bitwise_xor(const MatND& a, const Scalar& s, MatND& c, const MatND& mask=MatND());
- CV_EXPORTS void bitwise_not(const MatND& a, MatND& c);
- CV_EXPORTS void absdiff(const MatND& a, const MatND& b, MatND& c);
- CV_EXPORTS void absdiff(const MatND& a, const Scalar& s, MatND& c);
- CV_EXPORTS void inRange(const MatND& src, const MatND& lowerb,
- const MatND& upperb, MatND& dst);
- CV_EXPORTS void inRange(const MatND& src, const Scalar& lowerb,
- const Scalar& upperb, MatND& dst);
- CV_EXPORTS void compare(const MatND& a, const MatND& b, MatND& c, int cmpop);
- CV_EXPORTS void compare(const MatND& a, double s, MatND& c, int cmpop);
- CV_EXPORTS void min(const MatND& a, const MatND& b, MatND& c);
- CV_EXPORTS void min(const MatND& a, double alpha, MatND& c);
- CV_EXPORTS void max(const MatND& a, const MatND& b, MatND& c);
- CV_EXPORTS void max(const MatND& a, double alpha, MatND& c);
- CV_EXPORTS void sqrt(const MatND& a, MatND& b);
- CV_EXPORTS void pow(const MatND& a, double power, MatND& b);
- CV_EXPORTS void exp(const MatND& a, MatND& b);
- CV_EXPORTS void log(const MatND& a, MatND& b);
- CV_EXPORTS bool checkRange(const MatND& a, bool quiet=true, int* idx=0,
- double minVal=-DBL_MAX, double maxVal=DBL_MAX);
- typedef void (*ConvertData)(const void* from, void* to, int cn);
- typedef void (*ConvertScaleData)(const void* from, void* to, int cn, double alpha, double beta);
- CV_EXPORTS ConvertData getConvertElem(int fromType, int toType);
- CV_EXPORTS ConvertScaleData getConvertScaleElem(int fromType, int toType);
- template<typename _Tp> class CV_EXPORTS MatND_ : public MatND
- {
- public:
- typedef _Tp value_type;
- typedef typename DataType<_Tp>::channel_type channel_type;
- MatND_();
- MatND_(int dims, const int* _sizes);
- MatND_(int dims, const int* _sizes, const _Tp& _s);
- MatND_(const MatND& m);
- MatND_(const MatND_& m);
- MatND_(const MatND_& m, const Range* ranges);
- MatND_(const CvMatND* m, bool copyData=false);
- MatND_& operator = (const MatND& m);
- MatND_& operator = (const MatND_& m);
- MatND_& operator = (const _Tp& s);
- void create(int dims, const int* _sizes);
- template<typename T2> operator MatND_<T2>() const;
- MatND_ clone() const;
- MatND_ operator()(const Range* ranges) const;
- size_t elemSize() const;
- size_t elemSize1() const;
- int type() const;
- int depth() const;
- int channels() const;
- size_t stepT(int i) const;
- size_t step1(int i) const;
- _Tp& operator ()(const int* idx);
- const _Tp& operator ()(const int* idx) const;
- _Tp& operator ()(int idx0);
- const _Tp& operator ()(int idx0) const;
- _Tp& operator ()(int idx0, int idx1);
- const _Tp& operator ()(int idx0, int idx1) const;
- _Tp& operator ()(int idx0, int idx1, int idx2);
- const _Tp& operator ()(int idx0, int idx1, int idx2) const;
- };
- /////////////////////////// multi-dimensional sparse matrix //////////////////////////
- class SparseMatIterator;
- class SparseMatConstIterator;
- template<typename _Tp> class SparseMatIterator_;
- template<typename _Tp> class SparseMatConstIterator_;
- class CV_EXPORTS SparseMat
- {
- public:
- typedef SparseMatIterator iterator;
- typedef SparseMatConstIterator const_iterator;
- struct CV_EXPORTS Hdr
- {
- Hdr(int _dims, const int* _sizes, int _type);
- void clear();
- int refcount;
- int dims;
- int valueOffset;
- size_t nodeSize;
- size_t nodeCount;
- size_t freeList;
- vector<uchar> pool;
- vector<size_t> hashtab;
- int size[CV_MAX_DIM];
- };
- // sparse matrix node - element of a hash table
- struct CV_EXPORTS Node
- {
- size_t hashval;
- size_t next;
- int idx[CV_MAX_DIM];
- };
- ////////// constructors and destructor //////////
- // default constructor
- SparseMat();
- // creates matrix of the specified size and type
- SparseMat(int dims, const int* _sizes, int _type);
- // copy constructor
- SparseMat(const SparseMat& m);
- // converts dense 2d matrix to the sparse form,
- // if try1d is true and matrix is a single-column matrix (Nx1),
- // then the sparse matrix will be 1-dimensional.
- SparseMat(const Mat& m, bool try1d=false);
- // converts dense n-d matrix to the sparse form
- SparseMat(const MatND& m);
- // converts old-style sparse matrix to the new-style.
- // all the data is copied, so that "m" can be safely
- // deleted after the conversion
- SparseMat(const CvSparseMat* m);
- // destructor
- ~SparseMat();
- ///////// assignment operations ///////////
- // this is O(1) operation; no data is copied
- SparseMat& operator = (const SparseMat& m);
- // (equivalent to the corresponding constructor with try1d=false)
- SparseMat& operator = (const Mat& m);
- SparseMat& operator = (const MatND& m);
- // creates full copy of the matrix
- SparseMat clone() const;
- // copy all the data to the destination matrix.
- // the destination will be reallocated if needed.
- void copyTo( SparseMat& m ) const;
- // converts 1D or 2D sparse matrix to dense 2D matrix.
- // If the sparse matrix is 1D, then the result will
- // be a single-column matrix.
- void copyTo( Mat& m ) const;
- // converts arbitrary sparse matrix to dense matrix.
- // watch out the memory!
- void copyTo( MatND& m ) const;
- // multiplies all the matrix elements by the specified scalar
- void convertTo( SparseMat& m, int rtype, double alpha=1 ) const;
- // converts sparse matrix to dense matrix with optional type conversion and scaling.
- // When rtype=-1, the destination element type will be the same
- // as the sparse matrix element type.
- // Otherwise rtype will specify the depth and
- // the number of channels will remain the same is in the sparse matrix
- void convertTo( Mat& m, int rtype, double alpha=1, double beta=0 ) const;
- void convertTo( MatND& m, int rtype, double alpha=1, double beta=0 ) const;
- // not used now
- void assignTo( SparseMat& m, int type=-1 ) const;
- // reallocates sparse matrix. If it was already of the proper size and type,
- // it is simply cleared with clear(), otherwise,
- // the old matrix is released (using release()) and the new one is allocated.
- void create(int dims, const int* _sizes, int _type);
- // sets all the matrix elements to 0, which means clearing the hash table.
- void clear();
- // manually increases reference counter to the header.
- void addref();
- // decreses the header reference counter, when it reaches 0,
- // the header and all the underlying data are deallocated.
- void release();
- // converts sparse matrix to the old-style representation.
- // all the elements are copied.
- operator CvSparseMat*() const;
- // size of each element in bytes
- // (the matrix nodes will be bigger because of
- // element indices and other SparseMat::Node elements).
- size_t elemSize() const;
- // elemSize()/channels()
- size_t elemSize1() const;
- // the same is in Mat and MatND
- int type() const;
- int depth() const;
- int channels() const;
- // returns the array of sizes and 0 if the matrix is not allocated
- const int* size() const;
- // returns i-th size (or 0)
- int size(int i) const;
- // returns the matrix dimensionality
- int dims() const;
- // returns the number of non-zero elements
- size_t nzcount() const;
- // compute element hash value from the element indices:
- // 1D case
- size_t hash(int i0) const;
- // 2D case
- size_t hash(int i0, int i1) const;
- // 3D case
- size_t hash(int i0, int i1, int i2) const;
- // n-D case
- size_t hash(const int* idx) const;
- // low-level element-acccess functions,
- // special variants for 1D, 2D, 3D cases and the generic one for n-D case.
- //
- // return pointer to the matrix element.
- // if the element is there (it's non-zero), the pointer to it is returned
- // if it's not there and createMissing=false, NULL pointer is returned
- // if it's not there and createMissing=true, then the new element
- // is created and initialized with 0. Pointer to it is returned
- // If the optional hashval pointer is not NULL, the element hash value is
- // not computed, but *hashval is taken instead.
- uchar* ptr(int i0, bool createMissing, size_t* hashval=0);
- uchar* ptr(int i0, int i1, bool createMissing, size_t* hashval=0);
- uchar* ptr(int i0, int i1, int i2, bool createMissing, size_t* hashval=0);
- uchar* ptr(const int* idx, bool createMissing, size_t* hashval=0);
- // higher-level element access functions:
- // ref<_Tp>(i0,...[,hashval]) - equivalent to *(_Tp*)ptr(i0,...true[,hashval]).
- // always return valid reference to the element.
- // If it's did not exist, it is created.
- // find<_Tp>(i0,...[,hashval]) - equivalent to (_const Tp*)ptr(i0,...false[,hashval]).
- // return pointer to the element or NULL pointer if the element is not there.
- // value<_Tp>(i0,...[,hashval]) - equivalent to
- // { const _Tp* p = find<_Tp>(i0,...[,hashval]); return p ? *p : _Tp(); }
- // that is, 0 is returned when the element is not there.
- // note that _Tp must match the actual matrix type -
- // the functions do not do any on-fly type conversion
- // 1D case
- template<typename _Tp> _Tp& ref(int i0, size_t* hashval=0);
- template<typename _Tp> _Tp value(int i0, size_t* hashval=0) const;
- template<typename _Tp> const _Tp* find(int i0, size_t* hashval=0) const;
- // 2D case
- template<typename _Tp> _Tp& ref(int i0, int i1, size_t* hashval=0);
- template<typename _Tp> _Tp value(int i0, int i1, size_t* hashval=0) const;
- template<typename _Tp> const _Tp* find(int i0, int i1, size_t* hashval=0) const;
- // 3D case
- template<typename _Tp> _Tp& ref(int i0, int i1, int i2, size_t* hashval=0);
- template<typename _Tp> _Tp value(int i0, int i1, int i2, size_t* hashval=0) const;
- template<typename _Tp> const _Tp* find(int i0, int i1, int i2, size_t* hashval=0) const;
- // n-D case
- template<typename _Tp> _Tp& ref(const int* idx, size_t* hashval=0);
- template<typename _Tp> _Tp value(const int* idx, size_t* hashval=0) const;
- template<typename _Tp> const _Tp* find(const int* idx, size_t* hashval=0) const;
- // erase the specified matrix element.
- // When there is no such element, the methods do nothing
- void erase(int i0, int i1, size_t* hashval=0);
- void erase(int i0, int i1, int i2, size_t* hashval=0);
- void erase(const int* idx, size_t* hashval=0);
- // return the matrix iterators,
- // pointing to the first sparse matrix element,
- SparseMatIterator begin();
- SparseMatConstIterator begin() const;
- // ... or to the point after the last sparse matrix element
- SparseMatIterator end();
- SparseMatConstIterator end() const;
- // and the template forms of the above methods.
- // _Tp must match the actual matrix type.
- template<typename _Tp> SparseMatIterator_<_Tp> begin();
- template<typename _Tp> SparseMatConstIterator_<_Tp> begin() const;
- template<typename _Tp> SparseMatIterator_<_Tp> end();
- template<typename _Tp> SparseMatConstIterator_<_Tp> end() const;
- // return value stored in the sparse martix node
- template<typename _Tp> _Tp& value(Node* n);
- template<typename _Tp> const _Tp& value(const Node* n) const;
- ////////////// some internal-use methods ///////////////
- Node* node(size_t nidx);
- const Node* node(size_t nidx) const;
- uchar* newNode(const int* idx, size_t hashval);
- void removeNode(size_t hidx, size_t nidx, size_t previdx);
- void resizeHashTab(size_t newsize);
- enum { MAGIC_VAL=0x42FD0000, MAX_DIM=CV_MAX_DIM, HASH_SCALE=0x5bd1e995, HASH_BIT=0x80000000 };
- int flags;
- Hdr* hdr;
- };
- CV_EXPORTS void minMaxLoc(const SparseMat& a, double* minVal,
- double* maxVal, int* minIdx=0, int* maxIdx=0);
- CV_EXPORTS double norm( const SparseMat& src, int normType );
- CV_EXPORTS void normalize( const SparseMat& src, SparseMat& dst, double alpha, int normType );
- class CV_EXPORTS SparseMatConstIterator
- {
- public:
- SparseMatConstIterator();
- SparseMatConstIterator(const SparseMat* _m);
- SparseMatConstIterator(const SparseMatConstIterator& it);
- SparseMatConstIterator& operator = (const SparseMatConstIterator& it);
- template<typename _Tp> const _Tp& value() const;
- const SparseMat::Node* node() const;
- SparseMatConstIterator& operator --();
- SparseMatConstIterator operator --(int);
- SparseMatConstIterator& operator ++();
- SparseMatConstIterator operator ++(int);
- void seekEnd();
- const SparseMat* m;
- size_t hashidx;
- uchar* ptr;
- };
- class CV_EXPORTS SparseMatIterator : public SparseMatConstIterator
- {
- public:
- SparseMatIterator();
- SparseMatIterator(SparseMat* _m);
- SparseMatIterator(SparseMat* _m, const int* idx);
- SparseMatIterator(const SparseMatIterator& it);
- SparseMatIterator& operator = (const SparseMatIterator& it);
- template<typename _Tp> _Tp& value() const;
- SparseMat::Node* node() const;
- SparseMatIterator& operator ++();
- SparseMatIterator operator ++(int);
- };
- template<typename _Tp> class CV_EXPORTS SparseMat_ : public SparseMat
- {
- public:
- typedef SparseMatIterator_<_Tp> iterator;
- typedef SparseMatConstIterator_<_Tp> const_iterator;
- SparseMat_();
- SparseMat_(int dims, const int* _sizes);
- SparseMat_(const SparseMat& m);
- SparseMat_(const SparseMat_& m);
- SparseMat_(const Mat& m);
- SparseMat_(const MatND& m);
- SparseMat_(const CvSparseMat* m);
- SparseMat_& operator = (const SparseMat& m);
- SparseMat_& operator = (const SparseMat_& m);
- SparseMat_& operator = (const Mat& m);
- SparseMat_& operator = (const MatND& m);
- SparseMat_ clone() const;
- void create(int dims, const int* _sizes);
- operator CvSparseMat*() const;
- int type() const;
- int depth() const;
- int channels() const;
- _Tp& ref(int i0, size_t* hashval=0);
- _Tp operator()(int i0, size_t* hashval=0) const;
- _Tp& ref(int i0, int i1, size_t* hashval=0);
- _Tp operator()(int i0, int i1, size_t* hashval=0) const;
- _Tp& ref(int i0, int i1, int i2, size_t* hashval=0);
- _Tp operator()(int i0, int i1, int i2, size_t* hashval=0) const;
- _Tp& ref(const int* idx, size_t* hashval=0);
- _Tp operator()(const int* idx, size_t* hashval=0) const;
- SparseMatIterator_<_Tp> begin();
- SparseMatConstIterator_<_Tp> begin() const;
- SparseMatIterator_<_Tp> end();
- SparseMatConstIterator_<_Tp> end() const;
- };
- template<typename _Tp> class CV_EXPORTS SparseMatConstIterator_ : public SparseMatConstIterator
- {
- public:
- typedef std::forward_iterator_tag iterator_category;
- SparseMatConstIterator_();
- SparseMatConstIterator_(const SparseMat_<_Tp>* _m);
- SparseMatConstIterator_(const SparseMatConstIterator_& it);
- SparseMatConstIterator_& operator = (const SparseMatConstIterator_& it);
- const _Tp& operator *() const;
- SparseMatConstIterator_& operator ++();
- SparseMatConstIterator_ operator ++(int);
- };
- template<typename _Tp> class CV_EXPORTS SparseMatIterator_ : public SparseMatConstIterator_<_Tp>
- {
- public:
- typedef std::forward_iterator_tag iterator_category;
- SparseMatIterator_();
- SparseMatIterator_(SparseMat_<_Tp>* _m);
- SparseMatIterator_(const SparseMatIterator_& it);
- SparseMatIterator_& operator = (const SparseMatIterator_& it);
- _Tp& operator *() const;
- SparseMatIterator_& operator ++();
- SparseMatIterator_ operator ++(int);
- };
- //////////////////// Fast Nearest-Neighbor Search Structure ////////////////////
- class CV_EXPORTS KDTree
- {
- public:
- struct Node
- {
- Node() : idx(-1), left(-1), right(-1), boundary(0.f) {}
- Node(int _idx, int _left, int _right, float _boundary)
- : idx(_idx), left(_left), right(_right), boundary(_boundary) {}
- int idx; // split dimension; >=0 for nodes (dim),
- // < 0 for leaves (index of the point)
- int left, right; // node indices of left and right branches
- float boundary; // left if vec[dim]<=boundary, otherwise right
- };
- KDTree();
- KDTree(const Mat& _points, bool copyPoints=true);
- void build(const Mat& _points, bool copyPoints=true);
- int findNearest(const float* vec, int K, int Emax, int* neighborsIdx,
- Mat* neighbors=0, float* dist=0) const;
- int findNearest(const float* vec, int K, int Emax,
- vector<int>* neighborsIdx,
- Mat* neighbors=0, vector<float>* dist=0) const;
- void findOrthoRange(const float* minBounds, const float* maxBounds,
- vector<int>* neighborsIdx, Mat* neighbors=0) const;
- void getPoints(const int* idx, size_t nidx, Mat& pts) const;
- void getPoints(const Mat& idxs, Mat& pts) const;
- const float* getPoint(int ptidx) const;
- int dims() const;
- vector<Node> nodes;
- Mat points;
- int maxDepth;
- int normType;
- };
- //////////////////////////////////////// XML & YAML I/O ////////////////////////////////////
- class CV_EXPORTS FileNode;
- class CV_EXPORTS FileStorage
- {
- public:
- enum { READ=0, WRITE=1, APPEND=2 };
- enum { UNDEFINED=0, VALUE_EXPECTED=1, NAME_EXPECTED=2, INSIDE_MAP=4 };
- FileStorage();
- FileStorage(const string& filename, int flags);
- FileStorage(CvFileStorage* fs);
- virtual ~FileStorage();
- virtual bool open(const string& filename, int flags);
- virtual bool isOpened() const;
- virtual void release();
- FileNode getFirstTopLevelNode() const;
- FileNode root(int streamidx=0) const;
- FileNode operator[](const string& nodename) const;
- FileNode operator[](const char* nodename) const;
- CvFileStorage* operator *() { return fs; }
- const CvFileStorage* operator *() const { return fs; }
- void writeRaw( const string& fmt, const uchar* vec, size_t len );
- void writeObj( const string& name, const void* obj );
- static string getDefaultObjectName(const string& filename);
- Ptr<CvFileStorage> fs;
- string elname;
- vector<char> structs;
- int state;
- };
- class CV_EXPORTS FileNodeIterator;
- class CV_EXPORTS FileNode
- {
- public:
- enum { NONE=0, INT=1, REAL=2, FLOAT=REAL, STR=3, STRING=STR, REF=4, SEQ=5, MAP=6, TYPE_MASK=7,
- FLOW=8, USER=16, EMPTY=32, NAMED=64 };
- FileNode();
- FileNode(const CvFileStorage* fs, const CvFileNode* node);
- FileNode(const FileNode& node);
- FileNode operator[](const string& nodename) const;
- FileNode operator[](const char* nodename) const;
- FileNode operator[](int i) const;
- int type() const;
- int rawDataSize(const string& fmt) const;
- bool empty() const;
- bool isNone() const;
- bool isSeq() const;
- bool isMap() const;
- bool isInt() const;
- bool isReal() const;
- bool isString() const;
- bool isNamed() const;
- string name() const;
- size_t size() const;
- operator int() const;
- operator float() const;
- operator double() const;
- operator string() const;
- CvFileNode* operator *();
- const CvFileNode* operator* () const;
- FileNodeIterator begin() const;
- FileNodeIterator end() const;
- void readRaw( const string& fmt, uchar* vec, size_t len ) const;
- void* readObj() const;
- // do not use wrapper pointer classes for better efficiency
- const CvFileStorage* fs;
- const CvFileNode* node;
- };
- class CV_EXPORTS FileNodeIterator
- {
- public:
- FileNodeIterator();
- FileNodeIterator(const CvFileStorage* fs, const CvFileNode* node, size_t ofs=0);
- FileNodeIterator(const FileNodeIterator& it);
- FileNode operator *() const;
- FileNode operator ->() const;
- FileNodeIterator& operator ++();
- FileNodeIterator operator ++(int);
- FileNodeIterator& operator --();
- FileNodeIterator operator --(int);
- FileNodeIterator& operator += (int);
- FileNodeIterator& operator -= (int);
- FileNodeIterator& readRaw( const string& fmt, uchar* vec,
- size_t maxCount=(size_t)INT_MAX );
- const CvFileStorage* fs;
- const CvFileNode* container;
- CvSeqReader reader;
- size_t remaining;
- };
- ////////////// convenient wrappers for operating old-style dynamic structures //////////////
- // !!! NOTE that the wrappers are "thin", i.e. they do not call
- // any element constructors/destructors
- template<typename _Tp> class SeqIterator;
- typedef Ptr<CvMemStorage> MemStorage;
- template<typename _Tp> class CV_EXPORTS Seq
- {
- public:
- typedef SeqIterator<_Tp> iterator;
- typedef SeqIterator<_Tp> const_iterator;
- Seq();
- Seq(const CvSeq* seq);
- Seq(MemStorage& storage, int headerSize = sizeof(CvSeq));
- _Tp& operator [](int idx);
- const _Tp& operator[](int idx) const;
- SeqIterator<_Tp> begin() const;
- SeqIterator<_Tp> end() const;
- size_t size() const;
- int type() const;
- int depth() const;
- int channels() const;
- size_t elemSize() const;
- size_t index(const _Tp& elem) const;
- void push_back(const _Tp& elem);
- void push_front(const _Tp& elem);
- void push_back(const _Tp* elems, size_t count);
- void push_front(const _Tp* elems, size_t count);
- void insert(int idx, const _Tp& elem);
- void insert(int idx, const _Tp* elems, size_t count);
- void remove(int idx);
- void remove(const Range& r);
- _Tp& front();
- const _Tp& front() const;
- _Tp& back();
- const _Tp& back() const;
- bool empty() const;
- void clear();
- void pop_front();
- void pop_back();
- void pop_front(_Tp* elems, size_t count);
- void pop_back(_Tp* elems, size_t count);
- void copyTo(vector<_Tp>& vec, const Range& range=Range::all()) const;
- operator vector<_Tp>() const;
- CvSeq* seq;
- };
- template<typename _Tp> class CV_EXPORTS SeqIterator : public CvSeqReader
- {
- public:
- SeqIterator();
- SeqIterator(const Seq<_Tp>& seq, bool seekEnd=false);
- void seek(size_t pos);
- size_t tell() const;
- _Tp& operator *();
- const _Tp& operator *() const;
- SeqIterator& operator ++();
- SeqIterator operator ++(int) const;
- SeqIterator& operator --();
- SeqIterator operator --(int) const;
- SeqIterator& operator +=(int);
- SeqIterator& operator -=(int);
- // this is index of the current element module seq->total*2
- // (to distinguish between 0 and seq->total)
- int index;
- };
- }
- #endif // __cplusplus
- #include "cxoperations.hpp"
- #include "cxmat.hpp"
- #include "cxflann.h" // FLANN (Fast Library for Approximate Nearest Neighbors)
- #endif /*_CXCORE_HPP_*/