OpenCV2:總結篇 cv::Mat 類


一.簡介

在OpenCV中,可以用C++語法的Mat類來表示一張圖像

                  也可以用C語法的lpllmage或CvMat結構體來表示一張圖像

 

1.單通道像素值

 

2.多通道像素值

OpenCV默認顏色順序為BGR

 

 

二.成員公有函數

cv::Mat類能夠自動管理內存,由矩陣頭和指向存儲所有像素值的矩陣的指針構成

cv::Mat類表示一個n維的密集數值單通道或多通道數組,它可用於存儲實數或復數值的向量和矩陣 灰度和彩色圖像  體素  向量場  點雲  張量  直方圖等

 

1.常用的成員函數

Mat::Mat()

Mat::~Mat()

 

Mat::row                 // 創建一個具有指定了矩陣頭中行數的參數的矩陣
Mat::col                  // 創建一個具有指定了矩陣頭中列數的參數的矩陣
Mat::rowRange      // 為指定的行span創建一個新的矩陣頭,可取指定行區間元素
Mat::colRange       // 為指定的列span創建一個心得矩陣頭,可取指定列區間元素
Mat::clone             // 創建一個數據及其基礎數據的完整副本
Mat::copyTo          //
Mat::convertTo
Mat::zeros
Mat::ones
Mat::channels
Mat::empty
Mat::at 

Mat::isContinuous()    //判斷圖像存儲是否連續    

 

2.不常用的成員函數

Mat::addref()

Mat::adjustROI()

Mat::assignTo()

Mat::at()

Mat::begin()

Mat::channels()

Mat::checkVertor()

Mat::clone()

Mat::col()

Mat::colRange()

Mat::convertTo()

Mat::copySize()

Mat::copyTo()

Mat::create()

Mat::cross()

Mat::deallocate()

Mat::depth()

Mat::diag()

Mat::dot()

Mat::elemSize()

Mat::elemSize1()

Mat::empty()

Mat::end()

Mat::eye()

Mat::inv()

Mat::isContinuous()

Mat::isSubmatrix()

Mat::locateROI()

Mat::mul()

Mat::ones()

Mat::pop_back()

Mat::ptr()

Mat::push_back()

Mat::push_back_()

Mat::release()

Mat::reserve()

Mat::reshape()

Mat::resize()

Mat::row()

Mat::rowRange()

Mat::setTo()

Mat::step1()

Mat::t()

Mat::total()

Mat::type()

Mat::zeros()

 

 

3.成員數據

 

class CV_EXPORTS Mat
{
public :
  
     // 標志位
     int flags;
  
     // 矩陣的維數,應該大於等於2
     int dims;
  
     // 矩陣的行數和列數,如果維度大於2,則都為-1
     int rows,cols;
  
     // 指向數據的指針
     uchar* data;
  
     // 指向引用計數的指針
     int * refcount;
  
     uchar* datastart;
     uchar* dataend;
     uchar* datalimit;
     MatAllocator* allocator;
     MSize size;
     MStep step;
  
};

 

4.構造函數

Mat()                                                                                                                                 // 默認構造函數
Mat(int row,int cols,int type)
Mat(Size size,int type)
Mat(int rows,int cols,int type,const Scalar& s)
Mat(Size size,int type,const Scalar& s)
Mat(int ndims,const int* sizes,int type)
Mat(int ndims,const int* sizes,int type,const Scalar& s)
Mat(const Mat& m)                                                                                                           // 拷貝構造函數
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_SETP)
Mat(int ndims,const int* sizes,int type,void* data,const size_t* steps=0)
Mat(const Mat& m,const Range& rowRange,const Range& colRange=Range::all());
Mat(const Mat& m,const Rect& roi);
Mat(const Mat& m,const Range* ranges);
Mat(const CvMat* m,bool copyData=false);
Mat(const CvMatND* m,bool copyData=false);
Mat(const IplImage* img,bool copyData=false);

 

template<typename _Tp>explicit Mat(const vector<_Tp>& vec,bool copyData=false);
template<typename _Tp,int n>explicit Mat(const Vec<_Tp,n>& vec,bool copyData=true);
template<typename _tp,>

 

三.cv::Mat 類型轉換

1.cv::Mat 類轉換為 IplImage 類型和 CvMat 類型

cv::Mat img;
CvMat cvMatImg = img;
IplImage iplImage = img;

 

2.IpIImage 類型和 CvMat 類型轉換為 cv::Mat 類型

IplImage* iplImg = cvLoadImage("a.jpg");
cv::Mat img(iplImg, true);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM