图像处理-图片和数组的转换
Posted 进步小白
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图像处理-图片和数组的转换相关的知识,希望对你有一定的参考价值。
✨✨✨
感谢优秀的你打开了小白的文章
“希望在看文章的你今天又进步了一点点,离美好生活更近一步!”🌈
🚀往期回顾
图像的基本处理(一) | (1条消息) 图像基本处理(一)_am_student的博客-CSDN博客 |
图像的基本处理(二) | (1条消息) 图片的基本处理(二)_am_student的博客-CSDN博客 |
图像的基本处理(三) | (1条消息) 图像的基本处理(三)_am_student的博客-CSDN博客 |
图像的基本处理(四) 图像的基本处理(五)ImageDraw 模块的使用 |
🍉前言
在深度学习过程中,往往需要制作自己的数据集,相关论文中的现成的数据集尽管可以用来直观地感受算法的效果,但是与自己的项目需求都是有一定出入的。在有大量的图片样本时,我们首先需要读取图片,将其转化为numpy数组,并在控制台打印出来,直观地看到图片对应的矩阵是什么样子的。
🍉将图片转化成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文件,里面就是包含我们所需要的训练的数据。
以上是关于图像处理-图片和数组的转换的主要内容,如果未能解决你的问题,请参考以下文章