The method ocl::oclMat::ptr() is being removed because it returns a pointer to a row of oclMat::data. The data attribute is a cl_mem structure and cannot be iterated outside an OpenCL kernel.
		
			
				
	
	
		
			190 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			190 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
Data Structures
 | 
						|
=============================
 | 
						|
 | 
						|
.. ocv:class:: ocl::oclMat
 | 
						|
 | 
						|
OpenCV C++ 1-D or 2-D dense array class ::
 | 
						|
 | 
						|
    class CV_EXPORTS oclMat
 | 
						|
    {
 | 
						|
    public:
 | 
						|
        //! default constructor
 | 
						|
        oclMat();
 | 
						|
        //! constructs oclMatrix of the specified size and type (_type is CV_8UC1, CV_64FC3, CV_32SC(12) etc.)
 | 
						|
        oclMat(int rows, int cols, int type);
 | 
						|
        oclMat(Size size, int type);
 | 
						|
        //! constucts oclMatrix and fills it with the specified value _s.
 | 
						|
        oclMat(int rows, int cols, int type, const Scalar &s);
 | 
						|
        oclMat(Size size, int type, const Scalar &s);
 | 
						|
        //! copy constructor
 | 
						|
        oclMat(const oclMat &m);
 | 
						|
 | 
						|
        //! constructor for oclMatrix headers pointing to user-allocated data
 | 
						|
        oclMat(int rows, int cols, int type, void *data, size_t step = Mat::AUTO_STEP);
 | 
						|
        oclMat(Size size, int type, void *data, size_t step = Mat::AUTO_STEP);
 | 
						|
 | 
						|
        //! creates a matrix header for a part of the bigger matrix
 | 
						|
        oclMat(const oclMat &m, const Range &rowRange, const Range &colRange);
 | 
						|
        oclMat(const oclMat &m, const Rect &roi);
 | 
						|
 | 
						|
        //! builds oclMat from Mat. Perfom blocking upload to device.
 | 
						|
        explicit oclMat (const Mat &m);
 | 
						|
 | 
						|
        //! destructor - calls release()
 | 
						|
        ~oclMat();
 | 
						|
 | 
						|
        //! assignment operators
 | 
						|
        oclMat &operator = (const oclMat &m);
 | 
						|
        //! assignment operator. Perfom blocking upload to device.
 | 
						|
        oclMat &operator = (const Mat &m);
 | 
						|
        oclMat &operator = (const oclMatExpr& expr);
 | 
						|
 | 
						|
        //! pefroms blocking upload data to oclMat.
 | 
						|
        void upload(const cv::Mat &m);
 | 
						|
 | 
						|
 | 
						|
        //! downloads data from device to host memory. Blocking calls.
 | 
						|
        operator Mat() const;
 | 
						|
        void download(cv::Mat &m) const;
 | 
						|
 | 
						|
        //! convert to _InputArray
 | 
						|
        operator _InputArray();
 | 
						|
 | 
						|
        //! convert to _OutputArray
 | 
						|
        operator _OutputArray();
 | 
						|
 | 
						|
        //! returns a new oclMatrix header for the specified row
 | 
						|
        oclMat row(int y) const;
 | 
						|
        //! returns a new oclMatrix header for the specified column
 | 
						|
        oclMat col(int x) const;
 | 
						|
        //! ... for the specified row span
 | 
						|
        oclMat rowRange(int startrow, int endrow) const;
 | 
						|
        oclMat rowRange(const Range &r) const;
 | 
						|
        //! ... for the specified column span
 | 
						|
        oclMat colRange(int startcol, int endcol) const;
 | 
						|
        oclMat colRange(const Range &r) const;
 | 
						|
 | 
						|
        //! returns deep copy of the oclMatrix, i.e. the data is copied
 | 
						|
        oclMat clone() const;
 | 
						|
 | 
						|
        //! copies those oclMatrix elements to "m" that are marked with non-zero mask elements.
 | 
						|
        // It calls m.create(this->size(), this->type()).
 | 
						|
        // It supports any data type
 | 
						|
        void copyTo( oclMat &m, const oclMat &mask = oclMat()) const;
 | 
						|
 | 
						|
        //! converts oclMatrix to another datatype with optional scalng. See cvConvertScale.
 | 
						|
        void convertTo( oclMat &m, int rtype, double alpha = 1, double beta = 0 ) const;
 | 
						|
 | 
						|
        void assignTo( oclMat &m, int type = -1 ) const;
 | 
						|
 | 
						|
        //! sets every oclMatrix element to s
 | 
						|
        oclMat& operator = (const Scalar &s);
 | 
						|
        //! sets some of the oclMatrix elements to s, according to the mask
 | 
						|
        oclMat& setTo(const Scalar &s, const oclMat &mask = oclMat());
 | 
						|
        //! creates alternative oclMatrix header for the same data, with different
 | 
						|
        // number of channels and/or different number of rows. see cvReshape.
 | 
						|
        oclMat reshape(int cn, int rows = 0) const;
 | 
						|
 | 
						|
        //! allocates new oclMatrix data unless the oclMatrix 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);
 | 
						|
 | 
						|
        //! allocates new oclMatrix with specified device memory type.
 | 
						|
        void createEx(int rows, int cols, int type, DevMemRW rw_type, DevMemType mem_type);
 | 
						|
        void createEx(Size size, int type, DevMemRW rw_type, DevMemType mem_type);
 | 
						|
 | 
						|
        //! decreases reference counter;
 | 
						|
        // deallocate the data when reference counter reaches 0.
 | 
						|
        void release();
 | 
						|
 | 
						|
        //! swaps with other smart pointer
 | 
						|
        void swap(oclMat &mat);
 | 
						|
 | 
						|
        //! locates oclMatrix header within a parent oclMatrix. See below
 | 
						|
        void locateROI( Size &wholeSize, Point &ofs ) const;
 | 
						|
        //! moves/resizes the current oclMatrix ROI inside the parent oclMatrix.
 | 
						|
        oclMat& adjustROI( int dtop, int dbottom, int dleft, int dright );
 | 
						|
        //! extracts a rectangular sub-oclMatrix
 | 
						|
        // (this is a generalized form of row, rowRange etc.)
 | 
						|
        oclMat operator()( Range rowRange, Range colRange ) const;
 | 
						|
        oclMat operator()( const Rect &roi ) const;
 | 
						|
 | 
						|
        oclMat& operator+=( const oclMat& m );
 | 
						|
        oclMat& operator-=( const oclMat& m );
 | 
						|
        oclMat& operator*=( const oclMat& m );
 | 
						|
        oclMat& operator/=( const oclMat& m );
 | 
						|
 | 
						|
        //! returns true if the oclMatrix data is continuous
 | 
						|
        // (i.e. when there are no gaps between successive rows).
 | 
						|
        // similar to CV_IS_oclMat_CONT(cvoclMat->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, i.e. 8UC3 returns 8UC4 because in ocl
 | 
						|
        //! 3 channels element actually use 4 channel space
 | 
						|
        int ocltype() 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 element type, return 4 for 3 channels element,
 | 
						|
        //!becuase 3 channels element actually use 4 channel space
 | 
						|
        int oclchannels() const;
 | 
						|
        //! returns step/elemSize1()
 | 
						|
        size_t step1() const;
 | 
						|
        //! returns oclMatrix size:
 | 
						|
        // width == number of columns, height == number of rows
 | 
						|
        Size size() const;
 | 
						|
        //! returns true if oclMatrix data is NULL
 | 
						|
        bool empty() const;
 | 
						|
 | 
						|
        //! matrix transposition
 | 
						|
        oclMat t() const;
 | 
						|
 | 
						|
        /*! 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(OCL memory object)
 | 
						|
        uchar *data;
 | 
						|
 | 
						|
        //! pointer to the reference counter;
 | 
						|
        // when oclMatrix points to user-allocated data, the pointer is NULL
 | 
						|
        int *refcount;
 | 
						|
 | 
						|
        //! helper fields used in locateROI and adjustROI
 | 
						|
        //datastart and dataend are not used in current version
 | 
						|
        uchar *datastart;
 | 
						|
        uchar *dataend;
 | 
						|
 | 
						|
        //! OpenCL context associated with the oclMat object.
 | 
						|
        Context *clCxt;
 | 
						|
        //add offset for handle ROI, calculated in byte
 | 
						|
        int offset;
 | 
						|
        //add wholerows and wholecols for the whole matrix, datastart and dataend are no longer used
 | 
						|
        int wholerows;
 | 
						|
        int wholecols;
 | 
						|
    };
 | 
						|
 | 
						|
Basically speaking, the ``oclMat`` is the mirror of ``Mat`` with the extension of OCL feature, the members have the same meaning and useage of ``Mat`` except following:
 | 
						|
 | 
						|
* ``datastart`` and ``dataend`` are replaced with ``wholerows`` and ``wholecols``
 | 
						|
 | 
						|
* Only basic flags are supported in ``oclMat`` (i.e. depth number of channels)
 | 
						|
 | 
						|
* All the 3-channel matrix (i.e. RGB image) are represented by 4-channel matrix in ``oclMat``. It means 3-channel image have 4-channel space with the last channel unused. We provide a transparent interface to handle the difference between OpenCV ``Mat`` and ``oclMat``.
 | 
						|
    For example: If a ``oclMat`` has 3 channels, ``channels()`` returns 3 and ``oclchannels()`` returns 4
 |