python图⽚数组到⼆进制的互相转换需要导⼊以下包,没有的通过pip安装
import matplotlib.pyplot as plt
import cv2
from PIL import Image
from io import BytesIO
import numpy as np
1.图⽚和数组互转
# 图⽚转numpy数组
img_path = "images/1.jpg"
img_data = cv2.imread(img_path)
# numpy数组转图⽚
img_data = np.linspace(0,255,100*100*3).reshape(100,100,-1).astype(np.uint8)
cv2.imwrite("img.jpg",img_data) # 在当前⽬录下会⽣成⼀张img.jpg的图⽚
2.图⽚和⼆进制格式互转
# 以 ⼆进制⽅式 进⾏图⽚读取
with open("img.jpg","rb") as f:
img_bin = f.read() # 内容读取
# 将 图⽚的⼆进制内容 转成 真实图⽚
with open("img.jpg","wb") as f:
f.write(img_bin) # img_bin⾥⾯保存着 以⼆进制⽅式读取的图⽚内容,当前⽬录会⽣成⼀张im
g.jpg的图⽚
3.数组 和 图⽚⼆进制数据互转
"""
以上两种⽅式"合作"也可以实现,但是中间会有对外存的读写
⼀般这些到磁盘的IO操作还是很耗时间的
所以在内存直接处理会较好
"""
# 将数组转成 图⽚的⼆进制数据
img_data = np.linspace(0,255,100*100*3).reshape(100,100,-1).astype(np.uint8)
ret,buf = cv2.imencode(".jpg",img_data)
img_bin = Image.fromarray(np.uint8(buf)).tobytes()
# 将图⽚⼆进制数据 转为数组
img_data = plt.imread(BytesIO(img_bin),"jpg")
linspace numpy
print(type(img_data))
print(img_data.shape)
"""
out:
<class 'numpy.ndarray'>
(100, 100, 3)
"""
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论