zoukankan      html  css  js  c++  java
  • opencv中mat类介绍

    The class Mat represents an n-dimensional dense numerical single-channel or multi-channel array. It can be used to store (Mat类的对象用于表示一个多维度的单通道或者多通道稠密数组,它可以用来存储以下东西)

    real or complex-valued vectors or matrices

    实数值或复合值向量、矩阵)

    (grayscale or color images

    (灰度图或者彩色图)

    voxel volumes

    (立体元素)

    vector fields

    (矢量场)

    point clouds

    (点云)

    tensors

    (张量)  

    histograms (though, very high-dimensional histograms may be better stored in a SparseMat )

    直方图,高纬度的最好存放在SparseMat

    Opencv中mat类是核心类,用于存储图像信息,主要包括两部分,矩阵头信息和矩阵的数据信息。头信息固定大小,数据信息极大。Mat类的对象进行赋值和拷贝构造时仅仅生成头信息的备份和数据指针

     

    1 cv::Mat a ;//创建矩阵头
    2 a = cv::imread("xxx.jpg");//读入图像
    3 cv::Mat b = a ;//复制 

    b和a指向同一个矩阵,增加的时引用计数

    若要实现实际上的独立赋值,需要使用mat的clone()和copyTo()函数

    1 cv::Mat c = a.clone();
    2 cv::Mat d ;
    3 c.copyTo(d);

    mat的常用属性

    data
      uchar型的指针。Mat类分为了两个部分:矩阵头和指向矩阵数据部分的指针,data就是指向矩阵数据的指针。
    dims
      矩阵的维度,例如5*6矩阵是二维矩阵,则dims=2,三维矩阵dims=3.
    rows
      矩阵的行数
    cols
      矩阵的列数
    size
      矩阵的大小,size(cols,rows),如果矩阵的维数大于2,则是size(-1,-1)
    channels
      矩阵元素拥有的通道数。例如常见的彩色图像,每一个像素由RGB三部分组成,则channels = 3。
    type
      表示了矩阵中元素的类型以及矩阵的通道个数,它是一系列的预定义的常量,其命名规则为CV_(位数)+(数据类型)+C(通道数)。具体的有以下值:

    CV_8UC1

    CV_8UC2

    CV_8UC3

    CV_8UC4

    CV_8SC1

    CV_8SC2

    CV_8SC3

    CV_8SC4

    CV_16UC1

    CV_16UC2

    CV_16UC3

    CV_16UC4

    CV_16SC1

    CV_16SC2

    CV_16SC3

    CV_16SC4

    CV_32SC1

    CV_32SC2

    CV_32SC3

    CV_32SC4

    CV_32FC1

    CV_32FC2

    CV_32FC3

    CV_32FC4

    CV_64FC1

    CV_64FC2

    CV_64FC3

    CV_64FC4

      这里U(unsigned integer)表示的是无符号整数,S(signed integer)是有符号整数,F(float)是浮点数。
      例如:CV_16UC2,表示的是元素类型是一个16位的无符号整数,通道为2. C1,C2,C3,C4则表示通道是1,2,3,4
        type一般是在创建Mat对象时设定,如果要取得Mat的元素类型,则无需使用type,使用下面的depth
    depth
      矩阵中元素的一个通道的数据类型。这个值和type是相关的。例如 type为 CV_16SC2,一个2通道的16位的有符号整数。那么,depth则是CV_16S。depth也是一系列的预定义值,将type的预定义值去掉通道信息就是depth值:
      CV_8U CV_8S CV_16U CV_16S CV_32S CV_32F CV_64F
    elemSize
      矩阵一个元素占用的字节数,例如:type是CV_16SC3,那么elemSize = 3 * 16 / 8 = 6 bytes
    elemSize1
      矩阵元素一个通道占用的字节数,例如:type是CV_16CS3,那么elemSize1 = 16 / 8 = 2 bytes = elemSize / channels

  • 相关阅读:
    java接口鉴权之sign签名校验与JWT验证
    完整的后端开发流程-深入浅出Java线程池:使用篇
    Java多线程加法计算--Java识别静态验证码和动态验证码
    超全面设计指南:如何做大屏数据可视化设计?
    vue+echarts+datav大屏数据展示及实现中国地图省市县下钻
    开源」目前见过的最好的开源OA产品架构师之路(一):何时选用合适的语言
    如何做大屏数据可视化设计?
    Spring项目方便调试打印请求信息点击跳转到方法
    Echart生成的报表导出为PDF
    java环境变量一键配置
  • 原文地址:https://www.cnblogs.com/anqiang1995/p/7442812.html
Copyright © 2011-2022 走看看