1. 程式人生 > >在Python中如何儲存影象

在Python中如何儲存影象

在Python中如何儲存影象,如何將陣列儲存為影象

主要是看了TensorFlow中第一部分中看到的,查了查資料總結下如何將陣列儲存為影象
原程式如下

import scipy.misc
import os
#from PIL import Image
#把原始圖片儲存至MNIST_data/raw/下
save_dir="MNIST_data/raw/"
if os.path.exists(save_dir)is False:
    os.makedirs(save_dir)

for i in range(20):
    image_array=mnist.train.images[i,:]#列印第i個
    image_array=image_array.reshape(28,28)
    filename=save_dir + 'mnist_train_%d.jpeg' % i#儲存檔案的格式
    print(filename)
    print(mnist.train.labels[i,:])#打印出標籤
    scipy.misc.toimage(image_array,cmin=0.0,cmax=1.0).save(filename)#儲存影象

程式執行結果如下:

 MNIST_data/raw/mnist_train_0.jpeg
[0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]
MNIST_data/raw/mnist_train_1.jpeg
[0. 0. 0. 1. 0. 0. 0. 0. 0. 0.]
MNIST_data/raw/mnist_train_2.jpeg
[0. 0. 0. 0. 1. 0. 0. 0. 0. 0.]
MNIST_data/raw/mnist_train_3.jpeg
[0. 0. 0. 0. 0. 0. 1. 0. 0. 0.]
MNIST_data/raw/mnist_train_4.jpeg
[0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]
MNIST_data/raw/mnist_train_5.jpeg
[0. 0. 0. 0. 0. 0. 0. 0. 1. 0.]
MNIST_data/raw/mnist_train_6.jpeg
[0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]
MNIST_data/raw/mnist_train_7.jpeg
[1. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
MNIST_data/raw/mnist_train_8.jpeg
[0. 0. 0. 0. 0. 0. 0. 0. 0. 1.]
MNIST_data/raw/mnist_train_9.jpeg
[0. 0. 0. 0. 0. 0. 0. 0. 1. 0.]
MNIST_data/raw/mnist_train_10.jpeg
[1. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
MNIST_data/raw/mnist_train_11.jpeg
[0. 0. 0. 1. 0. 0. 0. 0. 0. 0.]
MNIST_data/raw/mnist_train_12.jpeg
[0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]
MNIST_data/raw/mnist_train_13.jpeg
[0. 0. 1. 0. 0. 0. 0. 0. 0. 0.]
MNIST_data/raw/mnist_train_14.jpeg
[0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]
MNIST_data/raw/mnist_train_15.jpeg
[1. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
MNIST_data/raw/mnist_train_16.jpeg
[0. 0. 1. 0. 0. 0. 0. 0. 0. 0.]
MNIST_data/raw/mnist_train_17.jpeg
[0. 0. 0. 0. 0. 0. 0. 0. 0. 1.]
MNIST_data/raw/mnist_train_18.jpeg
[0. 0. 0. 0. 0. 0. 1. 0. 0. 0.]
MNIST_data/raw/mnist_train_19.jpeg
[1. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
C:/Users/Administrator.SKY-20180518VHY/Desktop/pytorch code/pytorch/201811.07_tensorflow.py:63: DeprecationWarning: `toimage` is deprecated!
`toimage` is deprecated in SciPy 1.0.0, and will be removed in 1.2.0.
Use Pillow's ``Image.fromarray`` directly instead.

可以看到最下面寫的在scipy1.2.0版本中將會被Image.fromarray取代原函式將刪除,所以在此總結了下如儲存影象的問題,主要針對如何將陣列儲存為影象,方法一:利用scripy庫進行讀取

for i in range(20):
    image_array=mnist.train.images[i,:]#列印第i個
    image_array=image_array.reshape(28,28)
    filename=save_dir + 'mnist_train_%d.jpg' % i#儲存檔案的格式
    print(filename)
    print(mnist.train.labels[i,:])#打印出標籤
    scipy.misc.toimage(image_array,cmin=0.0,cmax=1.0).save(filename)#儲存影象

在這裡插入圖片描述

函式為scipy.misc.toimage(ARR,高=255,低= 0,Cmin =無,Cmax為無,PAL =無,模式=無,channel_axis =無)
scipy.misc.toimage(image_array, cmin=0.0, cmax=…).save(‘outfile.jpg’)

方法2利用PIL讀取

from PIL import Image
import matplotlib.pyplot as plt
img=Image.open('1.jpg')
print (img.size)  #圖片的尺寸
print (img.mode)  #圖片的模式
print (img.format) #圖片的格式
img.save('2.png')

對於此處mnist資料的讀取有

import os
from PIL import Image
#把原始圖片儲存至MNIST_data/raw/下
save_dir="MNIST_data/raw/"
if os.path.exists(save_dir)is False:
    os.makedirs(save_dir)
for i in range(20):
    image_array=mnist.train.images[i,:]#列印第i個
    image_array=image_array.reshape(28,28)
    filename=save_dir + 'mnist_train_%d.jpg' % i#儲存檔案的格式
    print(filename)
    print(mnist.train.labels[i,:])#打印出標籤
    a=Image.fromarray(image_array)
    a=a.convert('RGB')#將其轉換為RGB形式,或轉化為灰度形式
    a.save(filename)

問題:python的PIL開啟圖片之後報錯OSError: cannot write mode P as JPEG
解決:圖片模式不對,需要轉換

方法

from PIL import Image

im = Image.open('a.jpg')
im = im.convert('RGB')#im=im.convert('L')
im.save('b.jpg')

第三種方法:

from PIL import Image
import matplotlib
img=Image.open('1.jpg')
gray=img.convert('L')
matplotlib.image.imsave('name.png', gray)