matlab中读取mat文件和dat文件,dat文件运行速度更快。
Matlab MAT-文件 mat数据格式是matlab的数据存储的标准格式。mat文件是标准的二进制文件,还可以ASCII码形式保存和加载。
MATLAB是解释型语言,就是说MATLAB命令行中敲入的命令在当前MATLAB进程中被解释运行。但是,每次执行一个任务时敲入长长的命令序列是很烦人的。有两种方法可以使MATLAB的力量得到扩展——脚本和函数。这两种方法都用像emacs一样的文本编辑器中编写的m文件(因为扩展名是m所以这样命名,m文件还称点m文件)。m文件的好处在于它可以保存命令,还可以轻易地修改命令而无需重新敲入整个命令行。
DAT并不是一种标准文件。许多软件都使用这个扩展名,但文件含义不同。而许多数据分析软件也用这个扩展名保存数据。所以这要看具体的软件情况来定。DAT文件,可以按照扩展名来看就是DATA的意思,即数据文件,这类文件并没有进行绝对化的定义,例如VCD光盘中的DAT文件就可以用一般的视频播放器打开,而QQ的DAT文件中则存储了用户信息,是无法使用常规方式打开的,只有QQ程序可以访问。还有一些其他程序都有自己对DAT文件的定义,要通过其特殊的程序来打开与之相关联的DAT文件。
搬运自本人 CSDN 博客: 《Opencv中数据结构Mat的相关属性》
以上摘自OpenCV 249的官方文档opencv2refmanpdf。
以前虽然能够比较熟练的使用OpenCV,但是最近感觉其实笔者自己对OpenCV的最底层数据结构Mat与IplImage都不怎么熟悉…… 由于笔者比较反感总是需要管理内存的IplImage,所以对Mat数据结构做一下学习工作还是有必要的。
官方说明文档opencv2refmanpdf中,写出了Mat的定义如下:
下面笔者将从几个方面总结Mat数据结构的主要组成。
参考网址:
《OpenCV中对Mat里面depth,dims,channels,step,data,elemSize和数据地址计算的理解 》
《OpenCV Mat的常见属性》
《OpenCV学习笔记(四十)——再谈OpenCV数据结构Mat详解》
参考文档:
《opencv2refmanpdf》
如上面的Mat定义源码,Mat类中有很多重要的数据类型成员。
下面进行简单的列举。
把这四个数据成员放在一起,是因为这四个数据成员相互之间有关系。
数据的存储一直都是个值得关注的问题,所以数据元素存储的位数和范围就十分重要了。depth就体现了每一个像素的位数,即深度。
Mat中包含的图像深度如下所示:
另外还需要注意:大部分OpenCV的函数支持的数据深度只有8位和32位,所以尽量使用CV_64F。
channels表示了矩阵拥有的通道数量,这个比较容易理解:
type表示矩阵中元素的类型(depth)与矩阵的通道个数(channels),可以理解成上面的depth与channels的综合说明。type是一系列预定义的常量,命名规则如下:
<code>CV_+位数+数据类型+通道数</code>
具体有如下值:
表格中,行代表了通道数量channels,列代表了图像深度depth。
例如CV_8UC3,可以拆分为:
注:type一般是在创建Mat对象时设定,若要去的Mat的元素类型,可以不使用type,使用depth。
elemSize表示了矩阵中每一个元素的数据大小,单位是字节。公式如下:
<code>elemSize = channels depth / 8</code>
例如type == CV_16SC3,则elemSize = 3 16 / 8 = 6 Bytes。
elemSize1表示了矩阵元素的一个通道占用的数据大小,单位是字节。公式如下:
<code>elemSize = depth / 8</code>
例如type == CV_16SC3,则elemSize1 = 16 / 8 = 2 Bytes。
使用OpenCV处理图像时,最普遍的处理方式便是遍历图像,即访问所有的图像像素点。但有的算法还需要访问目标像素的邻域,所以这时候就需要了解访问Mat数据元素地址的方式。
假设有矩阵M,则数据元素的地址计算公式如下:
$$ addr(M_{i_{0}, i_{1}, i_{m-1}}) = Mdata + Mstep[0] i_{0} + Mstep[1] i_{1} + + Mstep[Mdims - 1] i_{M_{dims-1}} $$
如果是二维数组,则上述公式就简化成:
$$ addr(M_{i,j}) = Mdata + Mstep[0] i + Mstep[1] j $$
注:式中m = Mdims,即矩阵的维度。
假设存在一个二维矩阵如下图所示:
上面是一个3 × 4的矩阵。此时我们按照数据类型为CV_8U, CV_8UC3的情况,分别对其进行讨论。
首先假设其数据类型为CV_8U,也就是单通道的uchar类型,则可以得出上面的数据成员情况分别为:
若假设其数据类型为CV_8UC3,也就是三通道的uchar类型,则可以得出上面的数据成员情况分别为:
假设存在一个三维矩阵如下图所示:
上面是一个3 × 4 × 6的矩阵。假设其数据类型为CV_16SC4,此时对其进行讨论。
关于OpenCV地址访问方法及效率的部分,请见笔者的博文 《OpenCV像素点邻域遍历效率比较,以及访问像素点的几种方法 》 。
以上就是关于matlab中读取mat文件和dat文件,哪个速度快全部的内容,包括:matlab中读取mat文件和dat文件,哪个速度快、Opencv中数据结构Mat的相关属性、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)