一.簡介
在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::atMat::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);