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);
原文地址:https://www.cnblogs.com/k5bg/p/11136926.html