首页 > 其他分享 >Mat容器

Mat容器

时间:2023-12-10 18:56:09浏览次数:28  
标签:容器 Mat int 矩阵 cols type cv

Mat:在openCV中用于存储矩阵数据的类型

Mat中能存储的数据:

cv::Mat_<_Tp>, cv::Mat_<double>, cv::Mat_<float>, cv::Mat_<uchar>, cv::Mat_<unsigned char>

 openCV中规定的数据类型:

 

 

 Mat类的创建:

  1.cv::Mat::Mat(int rows,int cols,int type)//注意:type:矩阵中存储的数据类型,另如CV_8UC(n)中C(n)构建多通道,n指明通道数,不加C默认C(1),n最大取512

  2.cv::Mat::Mat(Size size,int type)//size:2D数组变量的尺寸,通过Size(cols,rows)进行赋值,type一致:

  3.cv::Mat::Mat(const Mat& m,const Range& rowRange,const Range& colRange=Range::all())//m已有的Mat类矩阵数据,rowRange行:如Range(2,5),colRange列:如Range(2,5)--------前闭后开

  4.cv::Mat::Mat(int rows,int cols,int type,const Scalar& s)//s:给矩阵中的每个像素赋值的参数变量,例如Scalar(0,0,255),这是3通道

  5.类方法赋值:

    eye:单位矩阵  diag:对角矩阵  ones:元素全为1的矩阵  zeros:元素全为0的矩阵

    举例:a=Mat::eye(3,3,type)

  6.枚举法赋值:

    举例:(类型为基本数据类型)

      cv::Mat a=(cv::Mat_<int>(3,3)<<1,2,3,4,5,6,7,8,9);

      cv::Mat b=(cd::Mat_<double>(2,)<<1.0,2.1,3.2,4.0,5.1,6.2);

 Mat类矩阵的常用属性

  cols,rows,step以字节为单位的矩阵的有效宽度,elemSize()每个元素的字节数,total()矩阵中元素的个数,channels矩阵的通道数

常用的Mat类矩阵的元素读取方式:

  • at()

    单通道:

      int value=(int)a.at<uchar>(0,0);//括号内为矩阵行列坐标

    多通道:

      cv::Vec3b vc3=b.at<cv::Vector>(0,0);

  • 指针ptr

    cv::Mat b(3, 4, CV_8UC3, cv::Scalar(0, 0, 1));

    for (int i = 0; i < b.rows; i++){

      uchar* ptr = b.ptr<uchar>(i);

      for (int j = 0; j < b.cols*b.channels(); j++){

        cout << (int)ptr[j] << endl;

      }

    }

  • 迭代器

cv::MatIterator_<uchar> it = a.begin<uchar>();

cv::MatIterator_<uchar> it_end = a.end<uchar>();

for (int i = 0; it != it_end; it++){

  cout << (int)(*it) << " ";

  if ((++i% a.cols) == 0){

    cout << endl;

  }

}

  • 通过矩阵元素的地址定位方式

(int)(*(b.data + b.step[0] * row + b.step[1] * col + channel));//b.step[0]行步长,b.step[1]列步长

标签:容器,Mat,int,矩阵,cols,type,cv
From: https://www.cnblogs.com/Zhaolongtao/p/17871107.html

相关文章

  • 通过宿主机查看K8S或者是容器内的Java程序的简单方法
    通过宿主机查看K8S或者是容器内的Java程序的简单方法背景最近一个项目的环境出现了cannotcreatenativeprocess的错误提示出现这个错误提示时,dockerexec或者是kubeexec进入容器/POD内部后,无法使用jstack等的命令.然后想简单查看一下问题原因都无从下手.这次......
  • 云计算中的容器化搭档Docker和K8S
    目录Docker容器Docker架构Kubernetes(k8s)容器技术演变传统部署时代:虚拟化部署时代:容器部署时代:为什么需要Kubernetes,它能做什么?DockervsK8s容器引擎vs.容器编排器:支持的镜像类型:镜像定义方式:DockerSwarmvsK8sK8s弃用Docker?Dockerdocker是一种开源的应用容器引擎,可以将应......
  • C++ Qt开发:使用关联容器类
    当我们谈论编程中的数据结构时,顺序容器是不可忽视的一个重要概念。顺序容器是一种能够按照元素添加的顺序来存储和检索数据的数据结构。它们提供了简单而直观的方式来组织和管理数据,为程序员提供了灵活性和性能的平衡。Qt中提供了丰富的容器类,用于方便地管理和操作数据。这些容......
  • How to add your own library in MATLAB Simulink Library Browser
    https://www.youtube.com/watch?v=WxFBXEZo0VI&ab_channel=HighVoltageEngineeringbyMGNiasarhttps://ww2.mathworks.cn/help/simulink/ug/creating-block-libraries.htmlLibrariesinSimulinkMadeEasy:https://www.youtube.com/watch?v=xWmIACn5Te0&ab_channel......
  • C++ Qt开发:使用顺序容器类
    当我们谈论编程中的数据结构时,顺序容器是不可忽视的一个重要概念。顺序容器是一种能够按照元素添加的顺序来存储和检索数据的数据结构。它们提供了简单而直观的方式来组织和管理数据,为程序员提供了灵活性和性能的平衡。Qt中提供了丰富的容器类,用于方便地管理和操作数据。这些容......
  • 基于Docker容器搭建hadoop完全分布式集群环境
    简介物理机:windows10宿主机:Centos7虚拟机,需要安装Docker服务hadoop集群节点:3个centos7的容器,hadoop1、hadoop2、hadoop3组件:容器镜像:Centos7DockerCE24.0.7JDK1.8.0_181Hadoop3.1.31.新建虚拟机安装CentOS72.安装Docker2.1安装docker服务yum-yinstalldocke......
  • ApplicationContextInitializer在Spring容器执行refresh之前执行
    ApplicationContextInitializer用于在刷新Spring容器之前的回调接口。ApplicationContextInitializer是Spring框架原有的概念,这个类的主要目的就是在ConfigurableApplicationContext类型(或者子类型)的ApplicationContext进行刷新refresh之前,允许我们对ConfigurableApplicatio......
  • 基于支持向量机SVM和MLP多层感知神经网络的数据预测matlab仿真
    1.算法运行效果图预览   2.算法运行软件版本matlab2022a 3.算法理论概述      支持向量机(SVM)和多层感知器(MLP)是两种常用的机器学习算法,它们在数据预测和分类任务中都有广泛的应用。下面将详细介绍这两种算法的原理和数学公式。 一、支持向量机(SVM) ......
  • 基于PSD-ML算法的语音增强算法matlab仿真
    1.算法运行效果图预览   2.算法运行软件版本matlab2022A 3.算法理论概述      PSD-ML(PowerSpectralDensityMaximumLikelihood)算法是一种基于最大似然估计的语音增强算法,通过对语音信号的功率谱密度进行估计,并利用估计结果对原始语音信号进行滤波处理,以达......
  • Simulink建模与仿真(6)-Simulink使用基础(MATLAB的单元与结构体)
    ✅作者简介:热爱科研的算法开发者,Python、Matlab项目可交流、沟通、学习。......