本示例程序主要是通过实例演示高维Mat的寻址方式。

    //3,4分别表示行数、列数,所以3*4是一个页面的元素数,2表示有2个3*4
int a=,b=,c=;
int size[]={a,b,c};
float* d1=new float[a*b*c];
for(int i=;i<a*b*c;i++)
d1[i] =(float)i;
Mat myND=Mat(,size,CV_32F,d1);
cout<<myND.step[]<<endl;//等于size中的3*4
cout<<myND.step[]<<endl;//对应size中的4
cout<<myND.step[]<<endl;//单个元素的字节数
int rows=myND.step1()/myND.step1();
int cols=myND.step1();
cout<<"rows="<<rows<<endl;
cout<<"cols="<<cols<<endl; for(int z=;z<a;z++)
{
cout<<endl<<"the "<<z<<"th plane";
for(int y=;y<rows;y++)
{ for(int x=;x<cols;x++)
{
if(x%cols==)
cout<<endl;
uchar*pa=(myND.data+myND.step[0]*z+myND.step[1]*y+myND.step[2]*x);
float*pij=(float*)pa;
cout<<*pij<<" "; } }
cout<<endl;
} return ;
}

上面的程序中,访问三维矩阵元素是,采用的方法是.data+step[0]*z+myND.step[1]*y+myND.step[2]*x

Mat的成员函数at(z,y,x)方法,也可以遍历每一个元素:

    //3,4分别表示列数、行数,所以3*4是一个页面的元素数,2表示有2个3*4
int a=,b=,c=;
int size[]={a,b,c};
float* d1=new float[a*b*c];
for(int i=;i<a*b*c;i++)
d1[i] =(float)i;
Mat myND=Mat(,size,CV_32F,d1);
cout<<myND.step[]<<endl;//等于size中的3*4
cout<<myND.step[]<<endl;//对应size中的4
cout<<myND.step[]<<endl;//单个元素的字节数
int rows=myND.step[]/myND.step[];
int cols=myND.step[]/myND.elemSize();
cout<<"rows="<<rows<<endl;
cout<<"cols="<<cols<<endl; for(int z=;z<a;z++)
{
cout<<endl<<"the "<<z<<"th plane";
for(int y=;y<rows;y++)
{ for(int x=;x<cols;x++)
{
if(x%cols==)
cout<<endl;
float p=myND.at<float>(z,y,x);
cout<<p<<" ";
} }
cout<<endl;
}
return ;
}

下面是运行结果与上图一致。

opencv中的高维矩阵Mat的更多相关文章

  1. OpenCV中图像的格式Mat 图像深度

    opencv中图像的格式Mat 有图像的定义,图像深度.类型格式等,其中Mat的参数depth为深度,深度反应出图像颜色像素值: 关于数据的储存:(转) Mat_<uchar>对应的是CV ...

  2. OpenCV 中获取图像或矩阵最大、最小值的简便方法

    C++: void minMaxLoc(InputArray src, double* minVal, double* maxVal=0, Point* minLoc=0, Point* maxLoc ...

  3. opencv中各种矩阵乘的差别

    尊重原创,转载请注明:http://blog.csdn.net/tangwei2014 OpenCV中每次遇到矩阵乘法就乱,各种翻各种查. 这次总结了一下.为了简单明了,还是让样例说话. 1. Mat ...

  4. Numpy和OpenCV中的图像几何变换

    介绍 上面的图像使它不言而喻什么是几何变换.它是一种应用广泛的图像处理技术.例如,在计算机图形学中有一个简单的用例,用于在较小或较大的屏幕上显示图形内容时简单地重新缩放图形内容. 它也可以应用于扭曲一 ...

  5. Opencv中Mat矩阵相乘——点乘、dot、mul运算详解

    Opencv中Mat矩阵相乘——点乘.dot.mul运算详解 2016年09月02日 00:00:36 -牧野- 阅读数:59593 标签: Opencv矩阵相乘点乘dotmul 更多 个人分类: O ...

  6. OpenCV中对Mat里面depth,dims,channels,step,data,elemSize和数据地址计算的理解 (转)

    cv::Matdepth/dims/channels/step/data/elemSizeThe class Mat represents an n-dimensional dense numeric ...

  7. opencv中Mat与IplImage,CVMat类型之间转换

    opencv中对图像的处理是最基本的操作,一般的图像类型为IplImage类型,但是当我们对图像进行处理的时候,多数都是对像素矩阵进行处理,所以这三个类型之间的转换会对我们的工作带来便利. Mat类型 ...

  8. OpenCV中的矩阵乘法运算

    转载:http://blog.csdn.net/tangwei2014 OpenCV中矩阵乘法运算 1. Mat*Mat: 第一个矩阵的列数必须等于第二个矩阵的行数. [0, 1, 2, 3;     ...

  9. OpenCV中Mat的详解

    每次碰到Mat都得反复查具体的用法,网上的基础讲解不多,难得看到一篇,赶快转来收藏~ 原文地址:http://www.opencvchina.com/thread-1039-1-1.html 目标 我 ...

随机推荐

  1. python3笔记二十:时间操作time

    一:学习内容 time时间戳 time元组 time字符串 time时间转换图解 二:time 需要引入:import time 1.概念 UTC(世界协调时间):格林尼治天文时间,世界标准时间,在中 ...

  2. 查看HearthBuddy.exe文件是x86还是x64版本

    https://www.cnblogs.com/chucklu/p/10020221.html 使用Powershell查看 PS C:\repository\GitHub\ChuckLu\Test\ ...

  3. leetcode-hard-array-76. Minimum Window Substring -NO

    mycode 不会.. 参考: class Solution(object): def minWindow(self, s, t): """ :type s: str : ...

  4. 网络通信框架之volley

    介绍 我们平时在开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据.Android系统中主要提供了两种方式来进行HTTP通信,Htt ...

  5. JAVA和Tomcat运维整理

    安装JAVA和Tomcatapache-tomcat-8.5.37.tar.gz  jdk-8u191-linux-x64.rpm [root@localhost ~]# ll /usr/java/t ...

  6. pandas数据分析案例

    1.数据分析步骤 ''' 数据分析步骤: 1.先加载数据 pandas.read_cvs("path") 2.查看数据详情 df.info() ,df.describe() ,df ...

  7. vue-cli3的安装使用

    一.安装vue-cli3 1.全局安装vue-cli 使用命令 cnpm install  -g @vue/cli . npm install  -g @vue/cli.yarn global add ...

  8. 添加额外yun源

    .yum install jq 发没有jq安装包,无法安装 .下载并安装EPEL [root@node2 coredns]# wget http://dl.fedoraproject.org/pub/ ...

  9. python 将视频转换成音频

    安装库 sudo pip install moviepy 代码 index.py from moviepy.editor import * video = VideoFileClip('test.mp ...

  10. 如何在robotframework基础上使用数据驱动测试

    一.写在前面 robotframework是很好用的关键字驱动测试框架,但是在实际工作中也有些地方使用不便,比如在我们设计参数校验测试case时,往往只是想修改校验参数类型而不得不做大量复制粘贴操作, ...