OpenCV2:基础篇 第一章 图像表示

时间:2022-04-14 08:45:17

一.简介

在OpenCV中,可以用C++语法的Mat类来表示一张图像

                  也可以用C语法的lpllmage或CvMat结构体来表示一张图像

 

1.单通道像素值

OpenCV2:基础篇 第一章 图像表示

 

2.多通道像素值

OpenCV默认颜色顺序为BGR

OpenCV2:基础篇 第一章 图像表示

 

二.Mat类

cv::Mat类能够自动管理内存,由矩阵头和指向存储所有像素值的矩阵的指针构成

cv::Mat类表示一个n维的密集数值单通道或多通道数组,它可用于存储实数或复数值的向量和矩阵 灰度和彩色图像  体素  向量场  点云  张量  直方图等

 

1.成员数据

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;
 
};

 

2.构造函数

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);

  • rows,cols

分别表示行,列

  • type

表示图像类型 CV_8UC1  CV_16SC1  CV_64FC3

 

3.模板构造函数

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,>

 

4.成员函数

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()    //判断图像存储是否连续    

 

三.lpllmage/CvMat结构体

1.IpIImage/CvMat和Mat相互转换