zoukankan      html  css  js  c++  java
  • 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);
  • 相关阅读:
    Linux 命令汇总总结相关
    数据结构---python---表
    python-----Queue模块
    再看python多线程------threading模块
    <转> Struct 和 Union区别 以及 对内存对齐方式的说明
    python装饰器
    HTTP权威指南----缓存
    HTTP权威指南----连接管理
    以python理解Linux的IO多路复用,select、poll、epoll
    <转载> pycharm快捷键及一些常用设置
  • 原文地址:https://www.cnblogs.com/k5bg/p/11136926.html
Copyright © 2011-2022 走看看