图像处理(九)-图片和数组的转换
✨✨✨ 感谢优秀的你打开了小白的文章 “希望在看文章的你今天又进步了一点点,离美好生活更近一步!”🌈
🚀往期回顾
前言
在过程中,往往需要制作自己的数据集,相关论文中的现成的数据集尽管可以用来直观地感受算法的效果,但是与自己的项目需求都是有一定出入的。在有大量的图片样本时,我们首先需要读取图片,将其转化为数组,并在控制台打印出来,直观地看到图片对应的矩阵是什么样子的。
将图片转化成numpy数组
例如:只是将一张照片转化为数组,那么可以简单的这样写。
from PIL import Image
import numpy as np
image = Image.open("2.jpg")
image_arr = np.array(image) # 转化成numpy数组
转换实例
我们的任务:是将在./images/中的图片转化为数组,并将转化的数组保存,然后尝试将数组再转化为图片保存在./result/中。
from PIL import Image
import numpy as np
import os
import pickle
#读取图片的目录
image_dir=./images/
#保存图片的目录
result_dir=./result/
#保存数组的文件
array_file=./array.bin
#读取images目录下的图片,将图片保存成大的一维数组,将数组保存到文件
def image_to_array_file():
#获取8张图片的名称
filenames=os.listdir(image_dir)
#定义变量保存8张图片的大数组
image_arrs=np.array([])
for filename in filenames:
#读取图片
img=Image.open(image_dir+filename)
#将每张图片分隔
r,g,b=img.split()
#将r g b 转换为一维的数组
r_arr=np.array(r).reshape(62500)
g_arr=np.array(g).reshape(-1)
b_arr=np.array(b).reshape(62500)
#将 r_arr g_arr b_arr 拼接为一维数组
arrs=np.concatenate((r_arr,g_arr,b_arr))
image_arrs=np.concatenate((arrs,image_arrs))
#将一维数组保存到文件中
with open(array_file,wb) as f:
pickle.dump(image_arrs,f)
#读取文件中的内容,转换图片
def file_to_image():
with open(array_file,rb) as f:
images=pickle.load(f)
image_arr=images.reshape((8,3,250,250))
for i in range(8):
r=Image.fromarray(image_arr[i][0]).convert(L)
g=Image.fromarray(image_arr[i][1]).convert(L)
b=Image.fromarray(image_arr[i][2]).convert(L)
#合并图片
image=Image.merge(RGB,(r,g,b))
image.save(result_dir+str(i)+.jpg)
if __name__ == __main__:
file_to_image()
那么我们可以得到一个关于存储数组的array文件,里面就是包含我们所需要的训练的数据。
