什么是.dat?python读取.dat⽂件并转换为png图像——超简单实现
相信⼤家和我⼀样,对于.dat⽂件是感到⼗分陌⽣的。因此在刚接触到这个⼩任务的时候我实在花了⼀些时间来了解到底什么是.dat⽂件。这⾥我将我⾃⼰的认识分享给⼤家:
总体⽽⾔,对于.dat⽂件的定义,我认为最关键,同时也是最容易被忽略掉的就是“dat是⼀种流⽂件格式”。看了很多⽂章中对.dat 格式的介绍,⼤多数局限在⾃⼰的领域中,例如有的⼈说这是⼀种“⾳频格式”,“这是⼀种vcd的格式”,“这是⼀种红外扫描格式”。我想⼤多数⼈和我⼀样,看到这么多不同的定义是要感到晕头转向的。
最后,让我们回到.dat⽂件的初始定义,也就是“流”这个关键字上来。相信⼤家对流的概念是“既陌⽣⼜熟悉”,那么别的理论性的东西我们就不谈了,究竟什么东西可以被表⽰为流呢?答案是,⼏乎所有数据收集设备采集到的数据,IO数据等等,在未加⼯状态下都可以被表达为流的形式。
.dat⽂件格式并不专指某种⽂件格式,他没有统⼀的标准。这也告诉了我们,在我们需要处理⼀个.dat⽂件的时候,我们的处理思路应该是这样的:python怎么读取dat文件
----1. 这个流⽂件的产⽣源头是哪⾥?举个很简单的例⼦,⾼德地图的数据可以被表⽰为流,那么⾼德地图如何定义它⾃⼰的流数据呢-----这也直接规范了我们接下来的处理操作
-
---2. 这个流⽂件到底存储的是什么数据呢?⾳频,视频,图像数据,不同的数据对应了不同的处理⽅式
----3. 实在没有什么可以参考的东西,最后才是依据我们的经验来处理这样⼀个⽂件
下⾯让我以⼀个具体的例⼦来进⾏说明,也就是本⽂的标题所指出的,将.dat⽂件转换为⼀个png图像
⾸先来进⾏⼀下简单的背景说明:这是我的“朋友”交给我的⼀个任务,对于这样⼀个.dat⽂件,他仅有的信息是“这⾥⾯保存了图
⽚”(就这么简单)
刚拿到这个⼩题⽬的时候,我是有点懵的。⾸先,即使知道了这其中保存的是图像,那么图像的格式为何呢?简单来说,图像的张数,图像的宽度与⾼度,图像的⾊彩位深等等信息的缺失,为这个问题增添了难度。
可以看到,由于我们对这个流⽂件⼀⽆所知,所以第⼀种⽅法(也就是到这个流⽂件的源头以及定义⽅式)是不那么容易,⾄少来说是不好确定的。因此我们可以从第⼆个⽅向⼊⼿,⾄少我们知道这是⼀个图像⽂件了对吧。接下来就是我们的经验发挥作⽤的时候。
⼀个保存有图像的流⽂件,注意,⾥⾯可能包含有不仅仅是⼀张图像,举个简单的例⼦:对于⼀个监控摄像头来说,它可以连续拍摄很多张图像并以⼀个流⽂件的形式输出;这样是不是感觉更加困难了?不要着急,我们是有地⽅⼊⼿的。打开.dat⽂件的属性我们来好好瞧瞧:
发现什么了吗?是的,这个⽂件是不是出奇地⼩呢?仅有256k,也就是262144字节…等等,你发现什么了吗?是的512 *
512==262144,这会不会是⼀张512 * 512的8位灰度图像呢!(⼀个字节是8位)。当然啦,这也有可能是1024 * 256的灰度图像,甚⾄可能是其他奇奇怪怪的组织形式,但⽆论怎么说我们的直觉告诉我们,很有可能是⼀张512*512的灰度图像!!(所以说,数据科学也好,图像分析也罢,保持对数字的敏感度是很重要的噢)
既然想到了这⼉了,我们何不来实现⼀下看看效果呢?如果不对我们可以再修正嘛:
下⾯是读取.dat⽂件并转换为png图像的python代码:
import cv2
import numpy as np
def main():
with open('./DAT/ex05.dat','rb')as f:
img = np.ad(), np.uint8).reshape(512,512)
// frombuffer,从IObuffer中读取
//第⼆个参数指定了读取的格式,np.uint8,因为我们认为是8位的灰度图像嘛。这需要你对图像处理有⼀定的理解哦,但是并不困难
//最后我们reshape⼀下,将图像组织为我们想要的宽度与⾼度
cv2.imwrite('./DAT/img.png', img)//保存图像为.png格式
if __name__ =='__main__':
main()
那么输出的结果为何呢?见证奇迹的时候到了!
怎么样?你要说这张图⽚是错误的,我还真不太信。果不其然,问了朋友,他说这是正确的!问题解决啦。
总结:
总体来说,本篇⽂章对.dat⽂件格式进⾏了⼀个简单的,但是应该能够帮助到你理解的⼀个介绍。其次我们对.dat⽂件的分析⽅法进⾏了⼀个简单的介绍,希望这个思路能够帮助到各位;最后,我们⽤⼀个简单python程序对.dat⽂件转换为png⽂件进⾏了实现,如果你的解决⽅案和我相同,直接⾃⼰写吧,太简单了有没有!
好了,感谢⼤家的阅读,请多多⽀持,点赞收藏噢!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论