博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【OpenCV学习】一个多维数组(矩阵)和一个一维,但是包含高维数据的数组之间的区别...
阅读量:7092 次
发布时间:2019-06-28

本文共 852 字,大约阅读时间需要 2 分钟。

作者:

出处:

我们需要了解一个多维数组(矩阵)和一个一维,但是包含高维数据的数组之间的区别。假设,你有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

作者:

出处:

转载地址:http://wciql.baihongyu.com/

你可能感兴趣的文章
anisble变量二(针对默认收集的信息处理)
查看>>
[大数据行业应用发展前景分析] 阿里潘永花报告:大数据产业将成为新的煤和石油介绍...
查看>>
聊聊spring cloud gateway的streaming-media-types属性
查看>>
dns 搭建和正向逆向解析
查看>>
TCP数据的传输进程
查看>>
实验18 交换机的端口安全
查看>>
Linux学习笔记第四周第二次课(2月27日)
查看>>
通过Nginx使全站页面变灰
查看>>
使用mysqlsla分析Mysql数据库日志
查看>>
Linux基本命令之小操作
查看>>
获取页面内任意对象的位置(x,y)
查看>>
C++中extern “C”含义深层探索
查看>>
JSP中include指令和include动作区别
查看>>
elasticsearch分组查询,按相关度降序排列,例子为取价格最大
查看>>
C#反射技术在多语言实现中的实际用处参考,让初学者学技术有个针对性【附源码】...
查看>>
Linux环境下搭建DHCP服务器
查看>>
Linux--IP基础知识 网关设定 dns服务
查看>>
J2ee分布式框架--技术介绍文档
查看>>
docker容器搭建kafka集群
查看>>
实验作业:网络环境搭建
查看>>