Mat是一个类,由两部分组成:

  1. 矩阵头(包含矩阵尺寸、存储方法、存储地址等信息)
  2. 指向存储所有像素值的矩阵(根据所选存储方法的不同,矩阵可以是不同的维数)的指针

OpenCV中,每个Mat对象有自己的信息头,但共享同一个矩阵。通过让矩阵指针指向同一地址实现。拷贝构造函数则只复制信息头和矩阵指针,而不复制矩阵。

如下边代码:

Mat A, C;  // 仅创建信息头部分
A = imread("1.jpg", CV_LOAD_IMAGE_COLOR)  // 这里为矩阵开辟内存
Mat B(A)  //使用拷贝构造函数
C=A;     //赋值运算符

上述代码中的所有Mat对象最终都指向同一个也是唯一一数据矩阵。虽然它们的信息头不同,但通过任何一个对象所做的改变也会影响其他对象。


创建部分信息数据的信息头:只需要创建包含边界信息的信息头

Mat D(A, Rect(10, 10, 100, 100));  //使用矩形界定
Mat E = A(Range:all(), Range(1, 3)

复制矩阵本身(不只是复制信息头和矩阵指针):使用函数clone()、copyTo()

Mat F = A.clone();
Mat G;
A.copyTo(G)

上述代码,改变F和G就不会影响Mat信息头所指向的矩阵。


总结:

OpenCV函数中输出图像的内存分配是自动完成的(如果不特别指定的话)

使用OpenCV的C++接口时不需要考虑内存释放问题

赋值运算符和拷贝构造函数(构造函数)只复制信息头和矩阵指针

使用clone()函数或copyTo()来复制一幅图像的矩阵


像素值的存储方法:

RGB:最常见

HSV、HSL:将颜色分解成色调、饱和度、亮度/明度

YCrCb:JPEG图像格式广泛使用

CIE L*a*b*:在感知上均匀的颜色空间,适合度量两个颜色之间的距离

【OpenCV】OpenCV函数精讲之 -- 图像容器Mat相关推荐

  1. MATLAB的图像上怎么标记数据点?Text函数精讲

    MATLAB的图像上怎么标记数据点?&Text函数精讲 文章目录 MATLAB的图像上怎么标记数据点?&Text函数精讲 前言 一.用Text函数可实现指定位置的添加 二.使用方法 1 ...

  2. 利用OpenCV的函数matchTemplate()实现在图像中寻找、检索、搜索模板图像【图像模板匹配】

    利用OpenCV的函数matchTemplate()实现在图像中寻找.检索.搜索模板图像[图像模板匹配] 在博文 https://www.hhai.cc/thread-220-1-1.html 中我们 ...

  3. python相关函数_python常用函数精讲

    原标题:python常用函数精讲 返回值为bool类型的函数 bool是Boolean的缩写,只有真(True)和假(False)两种取值 bool函数只有一个参数,并根据这个参数的值返回真或者假. ...

  4. python常用函数-python常用函数精讲

    原标题:python常用函数精讲 返回值为bool类型的函数 bool是Boolean的缩写,只有真(True)和假(False)两种取值 bool函数只有一个参数,并根据这个参数的值返回真或者假. ...

  5. 【云原生】第六篇--Dockerfile精讲及新型容器镜像构建技术

    Dockerfile精讲及新型容器镜像构建技术 一.容器与容器镜像之间的关系 二.容器镜像分类 三.容器镜像获取的方法 四.容器镜像获取方法演示 4.1 在DockerHub直接下载 4.2 把操作系 ...

  6. 【OpenCV】OpenCV函数精讲之 -- 初级图像混合

    本文是将设置感兴趣区域ROI和使用addWeighted函数进行图像线性混合结合起来使用,下边是具体的代码示例: #include <opencv2/core/core.hpp> #inc ...

  7. 【OpenCV】OpenCV函数精讲之 -- createTrackbar()函数、getTrackbarPos()函数

    目录 1.创建滑动条:createTrackbar()函数 2.获取当前轨迹条的位置:getTrackbarPos()函数 1.创建滑动条:createTrackbar()函数 createTrack ...

  8. 图像的形态学开操作(开运算)和闭操作(闭运算)的概念和作用,并用OpenCV的函数morphologyEx()实现对图像的开闭操作

    大家看这篇博文前可以先看一看下面这篇博文,下面这篇博文是这篇博文的基础: 详解图像形态学操作之图形的腐蚀和膨胀的概念和运算过程,并利用OpenCV的函数erode()和函数dilate()对图像进行腐 ...

  9. 【OpenCV】OpenCV函数精讲之 -- 访问图像中的像素

    图像在内存之中的存储方式: 图像矩阵的大小取决于所用的颜色模型,确切说,取决于所用通道数.如果是灰度图像,矩阵就会如图5.1所示. 对于多通道图像来说,矩阵中的列会包含多个子列,其子列个数与通道数相同 ...

最新文章

  1. mysql主从数据库含义_(转)Mysql数据库主从心得整理
  2. 学好C++十大良好的习惯
  3. 解决烧录问题:Jlink的三线制SWD方式连接STM32芯片无法识别的解决方案
  4. Linux目录的可写意味着,Linux权限分析 - osc_h5427nyq的个人空间 - OSCHINA - 中文开源技术交流社区...
  5. chr(10) chr(13) chr(32)
  6. 分享一下字节面试和华为面试,希望我失败经验能为大家铺铺路
  7. Java基础篇:switch语句
  8. 安卓移动办公软件_小企业使用的移动办公软件
  9. python文本交换_有没有办法用python交换文本文件中的两行文本?
  10. 物理Standby数据库的文件路径转换(1)
  11. 从“傻X”到牛X——写在最前面的话
  12. 纯前端导出excel文件(包含设置样式)
  13. 【初阶与进阶C++详解】第十八篇:map_set(map_set使用+multiset_multimap使用+模拟map_set)
  14. 1 Introduction  介绍
  15. [CVPR2020] Deep Global Registration
  16. 云渲染可以渲动画吗?
  17. 使用微软云人工智能,合成带感情的语音
  18. QQ音乐的动效歌词是如何实践的? 1
  19. Android Studio 自带的 jre 和甲骨文(Oracle)的 JDK
  20. awstats tomcat

热门文章

  1. python restful api_Python利用Django如何写restful api接口详解
  2. python显示等待和隐式等待_荐selenium内的隐式等待和显示等待的区别
  3. 字典推导式_Python基础-推导式
  4. cordova 支付_Cordova打包教程(H5项目打包成ipa)
  5. synchronized()_深入理解synchronized
  6. if函数python_python入门(if函数)
  7. keil运行c语言输入函数,keil 编译器V6 定义函数在ram中运行-和在指定地址定义常量,keil编译器...
  8. el-autocomplete判空校验时,第一次点击不通过,再次点击才正常
  9. c语言sleep函数上限多久解除,关于sleep函数的问题,
  10. android 休眠任务不执行_Springboot Scheduled任务为什么不执行?