1.MAT类:

OpenCV从2001年开始发展,在最初使用的是c语言,使用的是IplImage数据结构来存储图像,但是最大的问题需要手动申请释放内从( manual memory management),从OpenCV2.0开始,开始使用C++接口的Mat,这是自动分配和释放内存的(automatic memory management)。

Mat有两部分组成

  • 头部:存储方式、图像大小等信息,头部的大小是一个常量(constant)
  • 数据块:图像像素的值(按行顺序存储)
  • NOTE1:大部分拷贝Mat,如拷贝构造、赋值操作,只是拷贝头部信息,他们指向同一个数据块,不同对象对其做操作,会影响到其他对象。如果想进行深拷贝用

    cv::Mat::copyTo 和cv::Mat::clone 方法
  • NOTE2:多个头部指向同一个Matrix,那么谁来对其进行销毁:最后一个使用的对象,OpenCV内部有引用的计数机制 (reference counting mechanism),当增加一个对象(只复制一个头部指向Matrix)counter+1;如果一个对象销毁,counter-1。最后一个对象对Matrix进行回收。
Mat F = A.clone();
Mat G;
A.copyTo(G);

2.储存方式:

  • 彩色RGB,注意OpenCV存储顺序是BGR
  • HSV(色调、饱和度和值) and HLS(色调、亮度和饱和度):(hue, saturation and value/luminance)
  • YCrCb:JPEG格式使用
  • CIELab:测量颜色和颜色之间的距离时使用方便

3.结构类型:

[官方Mat类]:https://docs.opencv.org/4.0.0/d3/d63/classcv_1_1Mat.html#afbf34be80b7443123b2a032a67c3c4e3)

  • 点:

  • 向量:

  • Mat图像通道:

Mat数据结构的更多相关文章

  1. OpenCV(2)-Mat数据结构及访问Mat中像素

    Mat数据结构 一开始OpenCV是基于C语言的,在比较早的教材例如<学习OpenCV>中,讲解的存储图像的数据结构还是IplImage,这样需要手动管理内存.现在存储图像的基本数据结构是 ...

  2. 【转】OpenCV Mat数据结构

    转载自xiahouzuoxin原文 OpenCV基础篇之Mat数据结构 程序及分析 /* * FileName : MatObj.cpp * Author : xiahouzuoxin @163.co ...

  3. Opencv 的数据结构

    opencv的基本数据结构 结构 成员 意义 CvPoint int x,y 图像中的点 CvPoint2D32f float x,y 二维空间中的点 CvPoint3D32f float x,y,z ...

  4. OpenCV 之 Mat 类

    以前看 OpenCV 的书,或者资料也好,遇到 Mat 类的介绍,一般都是匆匆带过,自以为已经很熟悉了,从来没有深入研究过. 结果前段时间面试了一家公司,被问到两个 Mat 的问题:一是,谈谈对 Ma ...

  5. OpenCV Mat数据类型及位数总结(转载)

    OpenCV Mat数据类型及位数总结(转载) 前言 opencv中很多数据结构为了达到內存使用的最优化,通常都会用它最小上限的空间来分配变量,有的数据结构也会因为图像文件格式的关系而给予适当的变量, ...

  6. Iplimage versus Mat

    我们可能经常面临这样的困惑,Iplimage和Mat这两种数据结构,我们应该用哪一种数据结构. Iplimage一开始就存在opencv库之中,他来源于Intel的另外一个函数库Intel Image ...

  7. OpenCV3入门(二)Mat操作

    1.Mat结构 1.1.Mat数据 Mat本质上是由两个数据部分组成的类: 矩阵头:包含信息有矩阵的大小,用于存储的方法,矩阵存储的地址等 数据矩阵指针:指向包含了像素值的矩阵. 矩阵头部的大小是恒定 ...

  8. opencv 61篇

    (一)--安装配置.第一个程序 标签: imagebuildincludeinputpathcmd 2011-10-21 16:16 41132人阅读 评论(50) 收藏 举报  分类: OpenCV ...

  9. OpenCV图像处理篇之边缘检测算子

    OpenCV图像处理篇之边缘检测算子 转载: http://xiahouzuoxin.github.io/notes/ 3种边缘检测算子 一阶导数的梯度算子 高斯拉普拉斯算子 Canny算子 Open ...

  10. 基于OpenCV 的美颜相机推送直播流

    程序流程: 1.图像采集 先从opencv(2.4.10版本)采集回来摄像头的图像,是一帧一帧的 每一帧图像是一个矩阵,opencv中的mat 数据结构. 2.人脸的美化 人脸美化,我们用的皮肤检测, ...

随机推荐

  1. Go语言核心36讲05

    你已经使用过Go语言编写了小命令(或者说微型程序)吗? 当你在编写"Hello, world"的时候,一个源码文件就足够了,虽然这种小玩意儿没什么用,最多能给你一点点莫名的成就感. ...

  2. Huawei OJ 题解 - 1. A + B Problem - Go 参考解答

    # Huawei OJ 题解 - 1. A + B Problem - Go 参考解答## 简介- 详情:http://oj.rnd.huawei.com/problems/1/details- 难度 ...

  3. TreeUtils工具类一行代码实现列表转树 实战Java8 三级菜单 三级分类 附视频

    一.序言 在日常一线开发过程中,总有列表转树的需求,几乎是项目的标配,比方说做多级菜单.多级目录.多级分类等,有没有一种通用且跨项目的解决方式呢?帮助广大技术朋友给业务瘦身,提高开发效率. 本文将基于 ...

  4. Bugku 字符?正则?

    打开是一段中规中矩的php代码 先读一下代码 高亮文件2.php 定义变量key 定义变量IM其值是一个正则表达式匹配的结果 如果IM是真就输出key 所以这道题的关键也就是IM正则匹配的结果了,我们 ...

  5. 基于.net C# Socket WinForm MQTT 客户端开发

    1.什么是MQTT? MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的&quo ...

  6. IDEA git配置

    必备:安装Idea \ git配置git坏境:在环境变量中添加git安装包bin目录即可 1.去git官网申请一个账号 https://github.com/ 创建一个新的项目 2.在快速启动栏或者g ...

  7. Tkinter根据屏幕分辨率最大化适应屏幕

    还不能够实现所有组件随分辨率自动变化 # 实现的是界面覆盖整个屏幕 from tkinter import * import win32api, win32con # 获取屏幕的分辨率 width = ...

  8. 一篇文章教你实战Docker容器数据卷

    在上一篇中,咱们对Docker中的容器数据卷做了介绍.已经知道了容器数据卷是什么?能干什么用.那么本篇咱们就来实战容器数据卷,Docker容器数据卷案例主要做以下三个案例 1:宿主机(也就是Docke ...

  9. Jmeter 之模块控制器

    模块控制器作用: 模块控制器相当于python中的import 操作,即可以导入本线程组或者其他线程组下的控制器测试片段直接执行. 说明:被导入的测试片段可以是启用.禁用,导入后都将被执行. 字段解释 ...

  10. Spring IOC官方文档学习笔记(一)之IOC容器概述

    1.IOC容器简介 (1) org.springframework.beans 与 org.springframework.context 这两个包是Spring IOC容器的基础,在org.spri ...