You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					564 lines
				
				18 KiB
			
		
		
			
		
	
	
					564 lines
				
				18 KiB
			| 
											6 years ago
										 | /*M///////////////////////////////////////////////////////////////////////////////////////
 | ||
|  | //
 | ||
|  | //  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
 | ||
|  | //
 | ||
|  | //  By downloading, copying, installing or using the software you agree to this license.
 | ||
|  | //  If you do not agree to this license, do not download, install,
 | ||
|  | //  copy or use the software.
 | ||
|  | //
 | ||
|  | //
 | ||
|  | //                           License Agreement
 | ||
|  | //                For Open Source Computer Vision Library
 | ||
|  | //
 | ||
|  | // Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
 | ||
|  | // Copyright (C) 2009, Willow Garage Inc., all rights reserved.
 | ||
|  | // Third party copyrights are property of their respective owners.
 | ||
|  | //
 | ||
|  | // Redistribution and use in source and binary forms, with or without modification,
 | ||
|  | // are permitted provided that the following conditions are met:
 | ||
|  | //
 | ||
|  | //   * Redistribution's of source code must retain the above copyright notice,
 | ||
|  | //     this list of conditions and the following disclaimer.
 | ||
|  | //
 | ||
|  | //   * Redistribution's in binary form must reproduce the above copyright notice,
 | ||
|  | //     this list of conditions and the following disclaimer in the documentation
 | ||
|  | //     and/or other materials provided with the distribution.
 | ||
|  | //
 | ||
|  | //   * The name of the copyright holders may not be used to endorse or promote products
 | ||
|  | //     derived from this software without specific prior written permission.
 | ||
|  | //
 | ||
|  | // This software is provided by the copyright holders and contributors "as is" and
 | ||
|  | // any express or implied warranties, including, but not limited to, the implied
 | ||
|  | // warranties of merchantability and fitness for a particular purpose are disclaimed.
 | ||
|  | // In no event shall the Intel Corporation or contributors be liable for any direct,
 | ||
|  | // indirect, incidental, special, exemplary, or consequential damages
 | ||
|  | // (including, but not limited to, procurement of substitute goods or services;
 | ||
|  | // loss of use, data, or profits; or business interruption) however caused
 | ||
|  | // and on any theory of liability, whether in contract, strict liability,
 | ||
|  | // or tort (including negligence or otherwise) arising in any way out of
 | ||
|  | // the use of this software, even if advised of the possibility of such damage.
 | ||
|  | //
 | ||
|  | //M*/
 | ||
|  | 
 | ||
|  | #ifndef __OPENCV_GPUMAT_HPP__
 | ||
|  | #define __OPENCV_GPUMAT_HPP__
 | ||
|  | 
 | ||
|  | #ifdef __cplusplus
 | ||
|  | 
 | ||
|  | #include "opencv2/core/core.hpp"
 | ||
|  | #include "opencv2/core/cuda_devptrs.hpp"
 | ||
|  | 
 | ||
|  | namespace cv { namespace gpu
 | ||
|  | {
 | ||
|  |     //////////////////////////////// Initialization & Info ////////////////////////
 | ||
|  | 
 | ||
|  |     //! This is the only function that do not throw exceptions if the library is compiled without Cuda.
 | ||
|  |     CV_EXPORTS int getCudaEnabledDeviceCount();
 | ||
|  | 
 | ||
|  |     //! Functions below throw cv::Expception if the library is compiled without Cuda.
 | ||
|  | 
 | ||
|  |     CV_EXPORTS void setDevice(int device);
 | ||
|  |     CV_EXPORTS int getDevice();
 | ||
|  | 
 | ||
|  |     //! Explicitly destroys and cleans up all resources associated with the current device in the current process.
 | ||
|  |     //! Any subsequent API call to this device will reinitialize the device.
 | ||
|  |     CV_EXPORTS void resetDevice();
 | ||
|  | 
 | ||
|  |     enum FeatureSet
 | ||
|  |     {
 | ||
|  |         FEATURE_SET_COMPUTE_10 = 10,
 | ||
|  |         FEATURE_SET_COMPUTE_11 = 11,
 | ||
|  |         FEATURE_SET_COMPUTE_12 = 12,
 | ||
|  |         FEATURE_SET_COMPUTE_13 = 13,
 | ||
|  |         FEATURE_SET_COMPUTE_20 = 20,
 | ||
|  |         FEATURE_SET_COMPUTE_21 = 21,
 | ||
|  |         FEATURE_SET_COMPUTE_30 = 30,
 | ||
|  |         FEATURE_SET_COMPUTE_35 = 35,
 | ||
|  | 
 | ||
|  |         GLOBAL_ATOMICS = FEATURE_SET_COMPUTE_11,
 | ||
|  |         SHARED_ATOMICS = FEATURE_SET_COMPUTE_12,
 | ||
|  |         NATIVE_DOUBLE = FEATURE_SET_COMPUTE_13,
 | ||
|  |         WARP_SHUFFLE_FUNCTIONS = FEATURE_SET_COMPUTE_30,
 | ||
|  |         DYNAMIC_PARALLELISM = FEATURE_SET_COMPUTE_35
 | ||
|  |     };
 | ||
|  | 
 | ||
|  |     // Checks whether current device supports the given feature
 | ||
|  |     CV_EXPORTS bool deviceSupports(FeatureSet feature_set);
 | ||
|  | 
 | ||
|  |     // Gives information about what GPU archs this OpenCV GPU module was
 | ||
|  |     // compiled for
 | ||
|  |     class CV_EXPORTS TargetArchs
 | ||
|  |     {
 | ||
|  |     public:
 | ||
|  |         static bool builtWith(FeatureSet feature_set);
 | ||
|  |         static bool has(int major, int minor);
 | ||
|  |         static bool hasPtx(int major, int minor);
 | ||
|  |         static bool hasBin(int major, int minor);
 | ||
|  |         static bool hasEqualOrLessPtx(int major, int minor);
 | ||
|  |         static bool hasEqualOrGreater(int major, int minor);
 | ||
|  |         static bool hasEqualOrGreaterPtx(int major, int minor);
 | ||
|  |         static bool hasEqualOrGreaterBin(int major, int minor);
 | ||
|  |     private:
 | ||
|  |         TargetArchs();
 | ||
|  |     };
 | ||
|  | 
 | ||
|  |     // Gives information about the given GPU
 | ||
|  |     class CV_EXPORTS DeviceInfo
 | ||
|  |     {
 | ||
|  |     public:
 | ||
|  |         // Creates DeviceInfo object for the current GPU
 | ||
|  |         DeviceInfo() : device_id_(getDevice()) { query(); }
 | ||
|  | 
 | ||
|  |         // Creates DeviceInfo object for the given GPU
 | ||
|  |         DeviceInfo(int device_id) : device_id_(device_id) { query(); }
 | ||
|  | 
 | ||
|  |         std::string name() const { return name_; }
 | ||
|  | 
 | ||
|  |         // Return compute capability versions
 | ||
|  |         int majorVersion() const { return majorVersion_; }
 | ||
|  |         int minorVersion() const { return minorVersion_; }
 | ||
|  | 
 | ||
|  |         int multiProcessorCount() const { return multi_processor_count_; }
 | ||
|  | 
 | ||
|  |         size_t sharedMemPerBlock() const;
 | ||
|  | 
 | ||
|  |         void queryMemory(size_t& totalMemory, size_t& freeMemory) const;
 | ||
|  |         size_t freeMemory() const;
 | ||
|  |         size_t totalMemory() const;
 | ||
|  | 
 | ||
|  |         // Checks whether device supports the given feature
 | ||
|  |         bool supports(FeatureSet feature_set) const;
 | ||
|  | 
 | ||
|  |         // Checks whether the GPU module can be run on the given device
 | ||
|  |         bool isCompatible() const;
 | ||
|  | 
 | ||
|  |         int deviceID() const { return device_id_; }
 | ||
|  | 
 | ||
|  |     private:
 | ||
|  |         void query();
 | ||
|  | 
 | ||
|  |         int device_id_;
 | ||
|  | 
 | ||
|  |         std::string name_;
 | ||
|  |         int multi_processor_count_;
 | ||
|  |         int majorVersion_;
 | ||
|  |         int minorVersion_;
 | ||
|  |     };
 | ||
|  | 
 | ||
|  |     CV_EXPORTS void printCudaDeviceInfo(int device);
 | ||
|  |     CV_EXPORTS void printShortCudaDeviceInfo(int device);
 | ||
|  | 
 | ||
|  |     //////////////////////////////// GpuMat ///////////////////////////////
 | ||
|  | 
 | ||
|  |     //! Smart pointer for GPU memory with reference counting. Its interface is mostly similar with cv::Mat.
 | ||
|  |     class CV_EXPORTS GpuMat
 | ||
|  |     {
 | ||
|  |     public:
 | ||
|  |         //! default constructor
 | ||
|  |         GpuMat();
 | ||
|  | 
 | ||
|  |         //! constructs GpuMatrix of the specified size and type (_type is CV_8UC1, CV_64FC3, CV_32SC(12) etc.)
 | ||
|  |         GpuMat(int rows, int cols, int type);
 | ||
|  |         GpuMat(Size size, int type);
 | ||
|  | 
 | ||
|  |         //! constucts GpuMatrix and fills it with the specified value _s.
 | ||
|  |         GpuMat(int rows, int cols, int type, Scalar s);
 | ||
|  |         GpuMat(Size size, int type, Scalar s);
 | ||
|  | 
 | ||
|  |         //! copy constructor
 | ||
|  |         GpuMat(const GpuMat& m);
 | ||
|  | 
 | ||
|  |         //! constructor for GpuMatrix headers pointing to user-allocated data
 | ||
|  |         GpuMat(int rows, int cols, int type, void* data, size_t step = Mat::AUTO_STEP);
 | ||
|  |         GpuMat(Size size, int type, void* data, size_t step = Mat::AUTO_STEP);
 | ||
|  | 
 | ||
|  |         //! creates a matrix header for a part of the bigger matrix
 | ||
|  |         GpuMat(const GpuMat& m, Range rowRange, Range colRange);
 | ||
|  |         GpuMat(const GpuMat& m, Rect roi);
 | ||
|  | 
 | ||
|  |         //! builds GpuMat from Mat. Perfom blocking upload to device.
 | ||
|  |         explicit GpuMat(const Mat& m);
 | ||
|  | 
 | ||
|  |         //! destructor - calls release()
 | ||
|  |         ~GpuMat();
 | ||
|  | 
 | ||
|  |         //! assignment operators
 | ||
|  |         GpuMat& operator = (const GpuMat& m);
 | ||
|  | 
 | ||
|  |         //! pefroms blocking upload data to GpuMat.
 | ||
|  |         void upload(const Mat& m);
 | ||
|  | 
 | ||
|  |         //! downloads data from device to host memory. Blocking calls.
 | ||
|  |         void download(Mat& m) const;
 | ||
|  | 
 | ||
|  |         //! returns a new GpuMatrix header for the specified row
 | ||
|  |         GpuMat row(int y) const;
 | ||
|  |         //! returns a new GpuMatrix header for the specified column
 | ||
|  |         GpuMat col(int x) const;
 | ||
|  |         //! ... for the specified row span
 | ||
|  |         GpuMat rowRange(int startrow, int endrow) const;
 | ||
|  |         GpuMat rowRange(Range r) const;
 | ||
|  |         //! ... for the specified column span
 | ||
|  |         GpuMat colRange(int startcol, int endcol) const;
 | ||
|  |         GpuMat colRange(Range r) const;
 | ||
|  | 
 | ||
|  |         //! returns deep copy of the GpuMatrix, i.e. the data is copied
 | ||
|  |         GpuMat clone() const;
 | ||
|  |         //! copies the GpuMatrix content to "m".
 | ||
|  |         // It calls m.create(this->size(), this->type()).
 | ||
|  |         void copyTo(GpuMat& m) const;
 | ||
|  |         //! copies those GpuMatrix elements to "m" that are marked with non-zero mask elements.
 | ||
|  |         void copyTo(GpuMat& m, const GpuMat& mask) const;
 | ||
|  |         //! converts GpuMatrix to another datatype with optional scalng. See cvConvertScale.
 | ||
|  |         void convertTo(GpuMat& m, int rtype, double alpha = 1, double beta = 0) const;
 | ||
|  | 
 | ||
|  |         void assignTo(GpuMat& m, int type=-1) const;
 | ||
|  | 
 | ||
|  |         //! sets every GpuMatrix element to s
 | ||
|  |         GpuMat& operator = (Scalar s);
 | ||
|  |         //! sets some of the GpuMatrix elements to s, according to the mask
 | ||
|  |         GpuMat& setTo(Scalar s, const GpuMat& mask = GpuMat());
 | ||
|  |         //! creates alternative GpuMatrix header for the same data, with different
 | ||
|  |         // number of channels and/or different number of rows. see cvReshape.
 | ||
|  |         GpuMat reshape(int cn, int rows = 0) const;
 | ||
|  | 
 | ||
|  |         //! allocates new GpuMatrix data unless the GpuMatrix 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);
 | ||
|  |         //! decreases reference counter;
 | ||
|  |         // deallocate the data when reference counter reaches 0.
 | ||
|  |         void release();
 | ||
|  | 
 | ||
|  |         //! swaps with other smart pointer
 | ||
|  |         void swap(GpuMat& mat);
 | ||
|  | 
 | ||
|  |         //! locates GpuMatrix header within a parent GpuMatrix. See below
 | ||
|  |         void locateROI(Size& wholeSize, Point& ofs) const;
 | ||
|  |         //! moves/resizes the current GpuMatrix ROI inside the parent GpuMatrix.
 | ||
|  |         GpuMat& adjustROI(int dtop, int dbottom, int dleft, int dright);
 | ||
|  |         //! extracts a rectangular sub-GpuMatrix
 | ||
|  |         // (this is a generalized form of row, rowRange etc.)
 | ||
|  |         GpuMat operator()(Range rowRange, Range colRange) const;
 | ||
|  |         GpuMat operator()(Rect roi) const;
 | ||
|  | 
 | ||
|  |         //! returns true iff the GpuMatrix data is continuous
 | ||
|  |         // (i.e. when there are no gaps between successive rows).
 | ||
|  |         // similar to CV_IS_GpuMat_CONT(cvGpuMat->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 GpuMatrix size:
 | ||
|  |         // width == number of columns, height == number of rows
 | ||
|  |         Size size() const;
 | ||
|  |         //! returns true if GpuMatrix 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 <typename _Tp> operator PtrStepSz<_Tp>() const;
 | ||
|  |         template <typename _Tp> operator PtrStep<_Tp>() const;
 | ||
|  | 
 | ||
|  |         // Deprecated function
 | ||
|  |         template <typename _Tp> CV_GPU_DEPRECATED operator DevMem2D_<_Tp>() const;
 | ||
|  |         template <typename _Tp> CV_GPU_DEPRECATED operator PtrStep_<_Tp>() const;
 | ||
|  |         #undef CV_GPU_DEPRECATED
 | ||
|  | 
 | ||
|  |         /*! 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 GpuMatrix points to user-allocated data, the pointer is NULL
 | ||
|  |         int* refcount;
 | ||
|  | 
 | ||
|  |         //! helper fields used in locateROI and adjustROI
 | ||
|  |         uchar* datastart;
 | ||
|  |         uchar* dataend;
 | ||
|  |     };
 | ||
|  | 
 | ||
|  |     //! Creates continuous GPU matrix
 | ||
|  |     CV_EXPORTS void createContinuous(int rows, int cols, int type, GpuMat& m);
 | ||
|  |     CV_EXPORTS GpuMat createContinuous(int rows, int cols, int type);
 | ||
|  |     CV_EXPORTS void createContinuous(Size size, int type, GpuMat& m);
 | ||
|  |     CV_EXPORTS GpuMat createContinuous(Size size, int type);
 | ||
|  | 
 | ||
|  |     //! Ensures that size of the given matrix is not less than (rows, cols) size
 | ||
|  |     //! and matrix type is match specified one too
 | ||
|  |     CV_EXPORTS void ensureSizeIsEnough(int rows, int cols, int type, GpuMat& m);
 | ||
|  |     CV_EXPORTS void ensureSizeIsEnough(Size size, int type, GpuMat& m);
 | ||
|  | 
 | ||
|  |     CV_EXPORTS GpuMat allocMatFromBuf(int rows, int cols, int type, GpuMat &mat);
 | ||
|  | 
 | ||
|  |     ////////////////////////////////////////////////////////////////////////
 | ||
|  |     // Error handling
 | ||
|  | 
 | ||
|  |     CV_EXPORTS void error(const char* error_string, const char* file, const int line, const char* func = "");
 | ||
|  | 
 | ||
|  |     ////////////////////////////////////////////////////////////////////////
 | ||
|  |     ////////////////////////////////////////////////////////////////////////
 | ||
|  |     ////////////////////////////////////////////////////////////////////////
 | ||
|  | 
 | ||
|  |     inline GpuMat::GpuMat()
 | ||
|  |         : flags(0), rows(0), cols(0), step(0), data(0), refcount(0), datastart(0), dataend(0)
 | ||
|  |     {
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     inline GpuMat::GpuMat(int rows_, int cols_, int type_)
 | ||
|  |         : flags(0), rows(0), cols(0), step(0), data(0), refcount(0), datastart(0), dataend(0)
 | ||
|  |     {
 | ||
|  |         if (rows_ > 0 && cols_ > 0)
 | ||
|  |             create(rows_, cols_, type_);
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     inline GpuMat::GpuMat(Size size_, int type_)
 | ||
|  |         : flags(0), rows(0), cols(0), step(0), data(0), refcount(0), datastart(0), dataend(0)
 | ||
|  |     {
 | ||
|  |         if (size_.height > 0 && size_.width > 0)
 | ||
|  |             create(size_.height, size_.width, type_);
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     inline GpuMat::GpuMat(int rows_, int cols_, int type_, Scalar s_)
 | ||
|  |         : flags(0), rows(0), cols(0), step(0), data(0), refcount(0), datastart(0), dataend(0)
 | ||
|  |     {
 | ||
|  |         if (rows_ > 0 && cols_ > 0)
 | ||
|  |         {
 | ||
|  |             create(rows_, cols_, type_);
 | ||
|  |             setTo(s_);
 | ||
|  |         }
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     inline GpuMat::GpuMat(Size size_, int type_, Scalar s_)
 | ||
|  |         : flags(0), rows(0), cols(0), step(0), data(0), refcount(0), datastart(0), dataend(0)
 | ||
|  |     {
 | ||
|  |         if (size_.height > 0 && size_.width > 0)
 | ||
|  |         {
 | ||
|  |             create(size_.height, size_.width, type_);
 | ||
|  |             setTo(s_);
 | ||
|  |         }
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     inline GpuMat::~GpuMat()
 | ||
|  |     {
 | ||
|  |         release();
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     inline GpuMat GpuMat::clone() const
 | ||
|  |     {
 | ||
|  |         GpuMat m;
 | ||
|  |         copyTo(m);
 | ||
|  |         return m;
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     inline void GpuMat::assignTo(GpuMat& m, int _type) const
 | ||
|  |     {
 | ||
|  |         if (_type < 0)
 | ||
|  |             m = *this;
 | ||
|  |         else
 | ||
|  |             convertTo(m, _type);
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     inline size_t GpuMat::step1() const
 | ||
|  |     {
 | ||
|  |         return step / elemSize1();
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     inline bool GpuMat::empty() const
 | ||
|  |     {
 | ||
|  |         return data == 0;
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     template<typename _Tp> inline _Tp* GpuMat::ptr(int y)
 | ||
|  |     {
 | ||
|  |         return (_Tp*)ptr(y);
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     template<typename _Tp> inline const _Tp* GpuMat::ptr(int y) const
 | ||
|  |     {
 | ||
|  |         return (const _Tp*)ptr(y);
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     inline void swap(GpuMat& a, GpuMat& b)
 | ||
|  |     {
 | ||
|  |         a.swap(b);
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     inline GpuMat GpuMat::row(int y) const
 | ||
|  |     {
 | ||
|  |         return GpuMat(*this, Range(y, y+1), Range::all());
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     inline GpuMat GpuMat::col(int x) const
 | ||
|  |     {
 | ||
|  |         return GpuMat(*this, Range::all(), Range(x, x+1));
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     inline GpuMat GpuMat::rowRange(int startrow, int endrow) const
 | ||
|  |     {
 | ||
|  |         return GpuMat(*this, Range(startrow, endrow), Range::all());
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     inline GpuMat GpuMat::rowRange(Range r) const
 | ||
|  |     {
 | ||
|  |         return GpuMat(*this, r, Range::all());
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     inline GpuMat GpuMat::colRange(int startcol, int endcol) const
 | ||
|  |     {
 | ||
|  |         return GpuMat(*this, Range::all(), Range(startcol, endcol));
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     inline GpuMat GpuMat::colRange(Range r) const
 | ||
|  |     {
 | ||
|  |         return GpuMat(*this, Range::all(), r);
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     inline void GpuMat::create(Size size_, int type_)
 | ||
|  |     {
 | ||
|  |         create(size_.height, size_.width, type_);
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     inline GpuMat GpuMat::operator()(Range _rowRange, Range _colRange) const
 | ||
|  |     {
 | ||
|  |         return GpuMat(*this, _rowRange, _colRange);
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     inline GpuMat GpuMat::operator()(Rect roi) const
 | ||
|  |     {
 | ||
|  |         return GpuMat(*this, roi);
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     inline bool GpuMat::isContinuous() const
 | ||
|  |     {
 | ||
|  |         return (flags & Mat::CONTINUOUS_FLAG) != 0;
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     inline size_t GpuMat::elemSize() const
 | ||
|  |     {
 | ||
|  |         return CV_ELEM_SIZE(flags);
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     inline size_t GpuMat::elemSize1() const
 | ||
|  |     {
 | ||
|  |         return CV_ELEM_SIZE1(flags);
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     inline int GpuMat::type() const
 | ||
|  |     {
 | ||
|  |         return CV_MAT_TYPE(flags);
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     inline int GpuMat::depth() const
 | ||
|  |     {
 | ||
|  |         return CV_MAT_DEPTH(flags);
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     inline int GpuMat::channels() const
 | ||
|  |     {
 | ||
|  |         return CV_MAT_CN(flags);
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     inline Size GpuMat::size() const
 | ||
|  |     {
 | ||
|  |         return Size(cols, rows);
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     inline uchar* GpuMat::ptr(int y)
 | ||
|  |     {
 | ||
|  |         CV_DbgAssert((unsigned)y < (unsigned)rows);
 | ||
|  |         return data + step * y;
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     inline const uchar* GpuMat::ptr(int y) const
 | ||
|  |     {
 | ||
|  |         CV_DbgAssert((unsigned)y < (unsigned)rows);
 | ||
|  |         return data + step * y;
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     inline GpuMat& GpuMat::operator = (Scalar s)
 | ||
|  |     {
 | ||
|  |         setTo(s);
 | ||
|  |         return *this;
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     /** @cond IGNORED */
 | ||
|  |     template <class T> inline GpuMat::operator PtrStepSz<T>() const
 | ||
|  |     {
 | ||
|  |         return PtrStepSz<T>(rows, cols, (T*)data, step);
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     template <class T> inline GpuMat::operator PtrStep<T>() const
 | ||
|  |     {
 | ||
|  |         return PtrStep<T>((T*)data, step);
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     template <class T> inline GpuMat::operator DevMem2D_<T>() const
 | ||
|  |     {
 | ||
|  |         return DevMem2D_<T>(rows, cols, (T*)data, step);
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     template <class T> inline GpuMat::operator PtrStep_<T>() const
 | ||
|  |     {
 | ||
|  |         return PtrStep_<T>(static_cast< DevMem2D_<T> >(*this));
 | ||
|  |     }
 | ||
|  |     /** @endcond */
 | ||
|  | 
 | ||
|  |     inline GpuMat createContinuous(int rows, int cols, int type)
 | ||
|  |     {
 | ||
|  |         GpuMat m;
 | ||
|  |         createContinuous(rows, cols, type, m);
 | ||
|  |         return m;
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     inline void createContinuous(Size size, int type, GpuMat& m)
 | ||
|  |     {
 | ||
|  |         createContinuous(size.height, size.width, type, m);
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     inline GpuMat createContinuous(Size size, int type)
 | ||
|  |     {
 | ||
|  |         GpuMat m;
 | ||
|  |         createContinuous(size, type, m);
 | ||
|  |         return m;
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     inline void ensureSizeIsEnough(Size size, int type, GpuMat& m)
 | ||
|  |     {
 | ||
|  |         ensureSizeIsEnough(size.height, size.width, type, m);
 | ||
|  |     }
 | ||
|  | }}
 | ||
|  | 
 | ||
|  | #endif // __cplusplus
 | ||
|  | 
 | ||
|  | #endif // __OPENCV_GPUMAT_HPP__
 |