python二进制和图片转换

之前做项目,发现很多图片都是存储成二进制的形式,比如存储为.bin .dat等文件,如果你直接用记事本打开文件,会发现里面内容如下:

0005 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0001 0000 0000 0000 0000 0000 0000

这就说明是把图片转为了二进制字节流保存了起来,你需要通过代码将其转换成图片,下面我就给出转换的方法。

图片转二进制流

图片如果使用opencv读取出来,本质就是一个numpy,所以直接利用numpy的tofile即可将其保存成二进制流。


def save2bin_1():a = cv.imread("test.png")a.tofile("test.dat")

当然你也可以直接以wb的方式打开一个文件,然后把数据写进去即可。

def save2bin_2():a = cv.imread("test.png")with open("test1.dat","wb") as f:f.write(a)

二者本质是一样的,所以.dat里面的数据也是一样的。

这里有一点需要提的是,我们将数据写入dat里面后,其实不是一个numpy数组了,而变成了一个字节流,所以我们以第二种方式保存的话,我们还能够在字节流后面继续加入数据,比如:

def save2bin_2():a = cv.imread("test.png")with open("test1.dat","wb") as f:f.write(a)f.write(np.array([1],np.uint8))

一定要注意是uint8,因为这样以后解析的话,可以都按照每个数据都是一个字节。上面的代码其实相当于保存了一个图片和一个label。

当然如果也可以通过先把np展平,然后再增加一个1,这样保存一张图片和一个label:


def save2bin_2():a = cv.imread("test.png")a = a.flatten()a = np.append(a,1).astype(np.uint8)with open("test1.dat","wb") as f:f.write(a)

读取二进制流转为图片

numpy有tofile的方法,同样也有fromfile的方法,所有可以直接使用如下代码读:

def load_1():data = np.fromfile("test.dat",np.uint8).reshape(332,297,3)cv.imshow("a",data)cv.waitKey(0)

这里有两个小细节要注意,第一个是数据类型一定要是np.uint8,这样才能按照一个数据一个字节解析,第二个是一定要reshape,因为之前说过我们保存之后其实变成字节流了,你其实可以看作是一个字符串/list类似的东西,你可以打印一下看看print(np.fromfile("test.dat",np.uint8).shape),会发现其是一个一维的数据,相当于我们保存的时候,tofile把数据自动展平了,所以我们加载的时候要reshape。

除了直接用tofile方法,你可以用rb的方式打开这个文件,然后读取即可。

def load_2():f = open("test.dat","rb")d = f.read()tmp_a = []for i in d:tmp_a.append(i)tmp_a = np.array(tmp_a,dtype=np.uint8)cv.imshow("a",tmp_a.reshape(332,297,3))cv.waitKey(0)

这个代码就更能体现字节流的概念了,通过d = f.read(),我们将数据存到了d中,我们可以直接将d输出,你会发现是这种格式的数据b'\xff\xff\xff\xff\xff...,前面的b就代表了是字节,你可以输出d的类型,是<class 'bytes'>,我们如果想要取字节流里面的一个个数据,则需要遍历一遍,把每个字节都存起来存到tmp_a里面,这样就自动转成了int,所以tmp_a里面是这样的数据[255, 255, 255,...]就是一个普通的list,之后我们将其转成numpy并reshape即可。

了int,所以tmp_a里面是这样的数据[255, 255, 255,...]就是一个普通的list,之后我们将其转成numpy并reshape即可。

python二进制和图片转换相关推荐

  1. python 人像素描_基于python实现把图片转换成素描

    这篇文章主要介绍了基于python实现把图片转换成素描,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 导语: 你是否还在为当时年少时没有选择自己的梦 ...

  2. python画素描画_基于python实现把图片转换成素描

    这篇文章主要介绍了基于python实现把图片转换成素描,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 导语: 你是否还在为当时年少时没有选择自己的梦 ...

  3. Python关于人脸图片转换128/512维度向量的两种做法

    近期工作需要调研关于人脸转换向量存储到自家的数据库去做人脸识别,所以我在网上pick了两种关于人脸转换向量的两种简单做法,但是作为一个java开发工程师,对python的使用不是很精通,所以代码仅供参 ...

  4. python 二进制流转图片_Python零基础入门到精通-5.1节:Python程序的执行过程

    教程引言: 系统地讲解计算机基础知识,Python的基础知识, 高级知识,web开发框架,爬虫开发,数据结构与算法,nginx, 系统架构.一步步地帮助你从入门到就业. 5.1.1 在命令行中执行Py ...

  5. python 视频和图片转换 视频压缩 图片降低分辨率 图像处理

    python 做视频后期 单个视频转图片 所有图片转视频 视频压缩 - ffmpeg 图片降低分辨率 图像处理 这是最近无聊的想法,对视频进行处理,其实也就是对图片的处理. 对视频进行后期处理,思路就 ...

  6. 用python实现矩形图片转换正方形(防失真 + 文件批量可操作)

    矩形转换正方形 image保存的数据是个啥 设置新图片的参数以及大小 思路:读取文件,找到需要修改的图片,变成规定的格式,保存在文件夹中,结束 由于我学的知识有限,目前只对这个代码进行理解,粘贴复制修 ...

  7. 用python代码将图片转换成字符

    先上一个效果图 代码如下: from PIL import Image def getText(img):img = img.convert("L") #转为灰度图片charlis ...

  8. python PIL将图片转换成九宫格拼图样式

    原图片 生成的图片 # -*- coding: utf-8 -*- from PIL import Image ''' srouce_file:原图路径 out_file:保存的路径 gap_widt ...

  9. python base64和图片转换

    base64转图片 import os,base64 strs='''iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAAABGdBTUEAALGPC/xhB ...

最新文章

  1. shell之字体颜色显示
  2. JavaScipt30(第三个案例)(主要知识点:css变量)
  3. python和halcon_VisionPro和Halcon的详细对比
  4. 提升有监督学习效果的实战解析
  5. 现在为什么没有人再提“以厂为家”这样的词语啦?
  6. Nonlinear Projection Based Gradient Estimation for Query Efficient Blackbox Attacks论文解读
  7. js打印线程id_理解Python多线程:通过易懂的小例子展开第一篇
  8. 交通信息工程 实验四:交通仿真实验(二)
  9. VirtualBox安装及网络配置
  10. Java校招基础知识总结(横扫BAT,就业经验交流会演讲稿)
  11. YY频道美化,模板修改工具【免费】可以闪动
  12. 产品生命周期管理展望
  13. DAOS 源码解析之 daos_pool
  14. 多多情报通:拼多多数据分析工具在哪?
  15. 文献 | fMRI入门指南
  16. 热门!实用!免费2d游戏界面UI素材网站推荐!
  17. 四月IDO第四期,12个热门项目即将上线
  18. codevs 2833 奇怪的梦境
  19. 新浪程序员因加班错失年会77万元年会大奖?网友呼吁:应该补发
  20. [矩阵论] Unit 3. 矩阵的分解 - 知识点整理

热门文章

  1. weex中UISegmentControl实现及遇到的问题
  2. 21 个 MySQL 表设计的经验准则
  3. 电子器件系列27:无源蜂鸣片
  4. mysql查询手机号199开头_从今天起,你将能用上199开头的手机号了……
  5. 计算机每次关机需要配置,电脑关机,详细教您怎么设置电脑定时关机
  6. opengl碗状_OpenGLES简单入门
  7. vue项目中的h5图片上传(处理上传的时候图片被旋转的问题,并压缩图片大小)
  8. 基于PLC的实验室设备远程监控方案
  9. 在solaris上自动启动oracle
  10. 谷歌浏览器打开后同时弹出百度搜索和2345问题解决