在Python中如何儲存影象
阿新 • • 發佈:2018-11-27
在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)