一.简介

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

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

1.单通道像素值

2.多通道像素值

OpenCV默认颜色顺序为BGR

二.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相互转换

OpenCV2:第一章 图像表示的更多相关文章

  1. OpenCV2:第九章 图像比较

    一.简介 图像相似度主要是对两幅图像内容的相似程度进行打分,根据分数的高低来判断图像内容的相似程度. 常见的图像比较有两种方法:峰值信噪比PSNR和结构相似性SSIM 二.峰值信噪比PSNR(Peak ...

  2. PRML读书会第一章 Introduction(机器学习基本概念、学习理论、模型选择、维灾等)

    主讲人 常象宇 大家好,我是likrain,本来我和网神说的是我可以作为机动,大家不想讲哪里我可以试试,结果大家不想讲第一章.估计都是大神觉得第一章比较简单,所以就由我来吧.我的背景是统计与数学,稍懂 ...

  3. WEBGL 2D游戏引擎研发系列 第一章 <新的开始>

    WEBGL 2D游戏引擎研发系列 第一章 <新的开始> ~\(≥▽≤)/~HTML5游戏开发者社区(群号:326492427) 转载请注明出处:http://html5gamedev.or ...

  4. Cocos2d-x 3.0 红孩儿私人义务教育 - 第一章 熟人Cocos2d-x 3.0project

     Cocos2d-x 3.0 红孩儿私家必修 前言: 时光飞逝,每每看到博客上的回复和微博上的鼓舞,总会认为亏欠大家点什么.停下来太久.总是认为不太对劲,哈哈,时习之吧,望以此勉励大家. 红孩儿C ...

  5. Cracking the Coding Interview 第一章

    第一章:数组与字符串 1 数组与字符串 请实现一个算法,确定一个字符串的所有字符是否全都不同.这里我们要求不允许使用额外的存储结构. 给定一个string iniString,请返回一个bool值,T ...

  6. TeeChart For VCL/FMX V2017使用教程:第一章-准备开始

    https://blog.csdn.net/vbfgm/article/details/79338775 第一章 准备开始-构建图表和填充数据序列 1.1 简介 通过代码或Dataset(数据集)访问 ...

  7. 第一章:CDib类库的建立

    VC++图像处理程序设计(第1版)    杨淑莹 编著     边奠英 主审 第一章 位图基础 Joanna-In-Hdu&Hust 手工打,印象更深刻 使用工具 VS2010 mfc  整本 ...

  8. OpenGL笔记<第一章> 构建 GLSL class

    恭喜,我们终于很扎实地完成了第一章——glsl 入门 不幸的是,it's not the basic of GLSL shader ,我们下一节开篇,basic of GLSL shader 在下一章 ...

  9. MySQL----MySQL数据库入门----第一章 数据库入门

    第一章 数据库入门 1.1 数据库基础知识 1.1.1 数据库概述 数据不仅包括普通意义上的数字,还包括文字.图像.声音等.也就是说,凡是在计算机中用来描述事物的记录都可称作数据. 数据库的基本特点: ...

随机推荐

  1. std::unique

    类属性算法unique的作用是从输入序列中“删除”所有相邻的重复元素. 该算法删除相邻的重复元素,然后重新排列输入范围内的元素,并且返回一个迭代器(容器的长度没变,只是元素顺序改变了),表示无重复的值 ...

  2. Cannot call value of non-function type 'UITextView'报错

    iOS里面的开发,类写到一半就报错这个.后来发现是因为重名的时候召唤对象不明确的问题.先贴代码,晚点再说 出错点 //ヒントをクリアするためのイニシャライザ init (clearStr: UITex ...

  3. 每天一水poj1502【最短路】

    #include<iostream> #include<cstdio> #include<string.h> #include<algorithm> u ...

  4. touch的基本用法

    touch的基本功能是改变文件的时间戳,以下是三种常用用法: 1.创建一个空文件 以当前时间为时间戳创建一个空文件.$ touch touch.txt //touch.txt不存在 2.更改文件时间戳 ...

  5. IT兄弟连 JavaWeb教程 Servlet 状态管理 会话跟踪

    HTTP协议是无状态的,我们的客户端与服务器的每一次请求与响应,我们服务器都没有记忆能力将客户端与服务器的多次交互数据进行存储与管理共有两种技术实现: ●  基于客户端实现:Cookie,将状态保存在 ...

  6. YCOJ单向公路

    题目: 描述 某地区有许多城镇,但并不是每个城镇都跟其他城镇有公路连接,并且有的公路并不能双向行驶.现在我们把这些城镇间的公路分布及允许的行驶方向告诉你,你需要编程解决通过公路是否可以从一个城镇到达另 ...

  7. PyQt5编程入门

    1  25行的弹出式闹钟 import sys import time from PyQt5 import QtCore from PyQt5.QtWidgets import QLabel from ...

  8. Jamie and Interesting Graph CodeForces - 916C

    http://codeforces.com/problemset/problem/916/C 好尬的题啊... #include<cstdio> #include<algorithm ...

  9. python浅拷贝深拷贝

    copy_list=list[:]  得到的是浅拷贝,即只能顶层拷贝,里面的嵌套不会复制一份. a = [0, [1, 2], 3] b = a[:] a[0] = 8 a[1][1] = 9 请问现 ...

  10. CentOS 7.4安装mariadb,启动报错

    [root@iZ25b6alxstZ ~]# systemctl start mariadb Job for mariadb.service failed because the control pr ...