图像处理-图片和数组的转换

Posted 进步小白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图像处理-图片和数组的转换相关的知识,希望对你有一定的参考价值。

   ✨✨✨

感谢优秀的你打开了小白的文章

希望在看文章的你今天又进步了一点点,离美好生活更近一步!🌈

 🚀往期回顾

图像的基本处理(一)(1条消息) 图像基本处理(一)_am_student的博客-CSDN博客
图像的基本处理(二)(1条消息) 图片的基本处理(二)_am_student的博客-CSDN博客
图像的基本处理(三)(1条消息) 图像的基本处理(三)_am_student的博客-CSDN博客

图像的基本处理(四)

图像的基本处理(五)ImageDraw 模块的使用

(1条消息) 学完这些图像处理,我拿去给女友修了图..._am_student的博客-CSDN博客

图像的基本处理(五)ImageDraw 模块的使用_am_student的博客-CSDN博客

🍉前言

深度学习过程中,往往需要制作自己的数据集,相关论文中的现成的数据集尽管可以用来直观地感受算法的效果,但是与自己的项目需求都是有一定出入的。在有大量的图片样本时,我们首先需要读取图片,将其转化为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文件,里面就是包含我们所需要的训练的数据。

以上是关于图像处理-图片和数组的转换的主要内容,如果未能解决你的问题,请参考以下文章

如何将base64位的字节数组转换成图片并显示

将html转换为字节数组java中的图像

图片与Base64的转换

图像数据类型及颜色空间转换

Java BufferImage图片处理(获取宽高图片截取转换灰度图)

怎样把jpg图片变成png格式的