Opencv-多维数组内存分配
来源:互联网 发布:二战夜间轰炸 知乎 编辑:程序博客网 时间:2024/06/03 12:49
我们需要了解一个多维数组(矩阵)和一个一维,但是包含高维数据的数组之间的区别。假设,你有n个点(每个点有x,y,z坐标值)需要保存到CvMat* 中,你其实有四种方式可以使用,但这四种方式的存储形式不同。你可能使用一个二维矩阵,矩阵大小为n行3列,数据类型为CV32FC1。你还可以使用一个二维矩阵,矩阵大小为3行n列,数据类型为CV32FC1;第三种可能性是,你使用一个一维矩阵,n行1列,数据类型为CV32FC3;最后,你还可以使用1行三列,数据类型为CV32FC3.这几种方式,在内存分配上,有些是相同的,有些是不同的,如下所示:
n个点的集合(n=5);
(x0 y0 z0) (x1 y1 z1) (x2 y2 z2) (x3 y3 z3) (x4 y4 z4)
n行1列时(数据类型CV32FC3)内存分配情况
x0 y0 z0 x1 y1 z1 x2 y2 z2 x3 y3 z3 x4 y4 z4
1行n列时(数据类型CV32FC3)内存分配情况
x0 y0 z0 x1 y1 z1 x2 y2 z2 x3 y3 z3 x4 y4 z4
n行3列时(数据类型CV32FC1)内存分配情况
x0 y0 z0 x1 y1 z1 x2 y2 z2 x3 y3 z3 x4 y4 z4
3行n列时(数据类型CV32FC1)内存分配情况
x0 x1 x2 x3 x4 y0 y1 y2 y3 y4 z0 z1 z2 z3 z4
我们可以看出,前三种的内存分配情况相同,但最后一种的内存分配不同。更复杂的是,如果有n维数组,每个数组的元素是c维(c可能是通道数)时。所以,多维数组(矩阵)和一个一维但包含多维数据的数组一般是不同的。
对于一个Rows行Cols列,通道数为Channels的矩阵,访问其中第row行,第col列,第channel通道的数据,可以使用如下公式:
数据地址偏移量=row*Cols*Channels+col*Channels+channel
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/gnuhpc/archive/2009/07/03/4320577.aspx
- Opencv-多维数组内存分配
- Java多维数组的内存分配
- C/C++多维数组内存分配及释放
- C语言中多维数组的内存分配和释放(malloc与free)
- C语言中多维数组的内存分配和释放(malloc与free)(转)
- C++中 关于多维数组在计算机内存中的分配情况
- C和C++动态内存的申请与释放思考(动态多维数组空间分配)
- C++动态二维数组内存的分配和释放 opencv
- opencv Mat 内存分配
- 多维动态数组分配的方法
- openCV多维矩阵的内存分布
- 动态数组分配内存
- cuda数组内存分配
- 数组内存分配举例
- 数组内存分配图解
- 数组内存分配。
- 动态内存分配数组
- 动态内存分配 数组
- Using gsoap for web services in symbian
- 什么是3G
- J2ME循环与String优化设计
- 红旗Linux Server 5.0下 Subversion的安装
- j2me内存优化
- Opencv-多维数组内存分配
- 关于二级域名Cookie的问题及解决方法
- 红旗Linux Server 5.0下Subversion的备份策略实现
- 基于jq的编辑插件singleEdit
- 奔跑的人生
- 物理实验室--Java实现的物理仿真
- 图像的过滤
- WebService优点和缺点
- 我第一个桌面软件--MP3播放器