plt.showで表示する画像をプログラム上で保存する方法
Matplotlibのplt.showを使って表示する画像をプログラム上で保存する方法について、 savefigとimsaveを使った2つの方法を用いて紹介します。
目次
・プログラム上で保存する方法 savefigとimsave
・すべての手書き数字画像を保存(実行しない方がいいです)
・手書き数字画像を保存した様子
プログラム上で保存する方法 savefigとimsave
savefigを使った保存
1 2 3 4 5 6 7 8 9 10 |
from matplotlib import pyplot as plt import numpy as np x = np.arange(-10, 10, 0.1) y = np.sin(x) plt.plot(x,y) plt.savefig("test1.jpg") plt.show() |

savefigはplt.show()で表示したものをそのまま保存。(640×480サイズで保存)
そのまま保存されるので目盛り付きで保存されます。
plt.savefig(“test1.jpg”)の前に目盛りを消す命令、plt.axis(“off”)を入れて実行↓

imsaveを使った保存
1 2 3 4 5 6 7 8 |
from matplotlib import pyplot as plt import cv2 image = plt.imread('DSC_0243.JPG') image=cv2.rotate(image, cv2.ROTATE_90_CLOCKWISE)#回転 plt.imshow(image) plt.imsave("test2.jpg",image) plt.show() |
plt.imshow(image)で表示される画像には、目盛りが付いていますがplt.imsave(“test2.jpg”,image) で保存される画像には付かないです。 保存される画像サイズは読み込んだ画像と同じになります。
あと、なぜか画像が回転されて表示されてしまったので、cv2.rotate(image,cv2.ROTATE_90_CLOCKWISE)を使って正しい向きにしています。


sklearnの手書き数字画像をsavefigとimsaveで保存できるか試したプログラム↓
すべての手書き数字画像を保存
savefigで保存
注意:下のプログラムは2時間以上かっかたので実行しない方がいいです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
from sklearn.datasets import load_digits import matplotlib.pyplot as plt import numpy as np digits = load_digits()#手書き数字データの読み込み n=len(digits.target)#手書き数字データの個数、1797を取得 print("保存中...") #next_tegaki_bwフォルダ内の0~9の各フォルダに、手書き数字画像を数字ごとに保存 for i in range(10):#10 c=1 for j in range(n):#1797回繰り返す if i == digits.target[j]:#i=0~9の順にフォルダに保存していく img = 16-digits.data[j]#白黒反転 img = np.reshape(img, (8,8))#8x8ピクセル f="next_tegaki_bw/"+str(i)+"/"+str(c)+".jpg"#.jpgで保存 plt.imshow(img,cmap="gray")#gray画像で保存 plt.axis("off") plt.savefig(f)#plt.show()で表示する画像の大きさで保存 c+=1 print(str(i)+"フォルダ完了")#各フォルダに画像の保存が終われば表示 print("保存しました") |
フォルダの作成はこちら「sklearnの手書き数字画像を数字ごとにフォルダを分けて保存する方法」の投稿で紹介しています。
プログラムもその投稿で紹介したプログラムに白黒反転とplt.savefig()を追加、変更したものになるので、プログラムの説明はそちらの投稿を拝見してください。
640×480(幅x高さ)の大きさで画像を保存し、なおかつ1797枚も保存するので、時間がかかってしまします。
手書き数字画像を保存した様子



サイズが大きいので、見やすいです。
imsaveで保存
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
import matplotlib.pyplot as plt from sklearn.datasets import load_digits import numpy as np digits = load_digits()#手書き数字データの読み込み n=len(digits.target)#手書き数字データの個数、1797を取得 print("保存中...") #tegaki_bwフォルダ内の0~9の各フォルダに、手書き数字画像を数字ごとに保存 for i in range(10): c=1#保存する画像名前で使う for j in range(n):#1797回繰り返す if i==digits.target[j]:#0~9の順にフォルダに保存していく img = 16-digits.data[j]#白黒反転 img = np.reshape(img, (8,8))#8x8ピクセル f="tegaki_bw/"+str(i)+"/"+str(c)+".jpg"#.jpgで保存 plt.imsave(f,img,cmap="gray")#8x8の大きさのまま保存 c+=1 print(str(i)+"フォルダ完了")#各フォルダに画像の保存が終われば表示 print("保存しました") |
savefigとimsaveの比較
savefigで保存した様子

imsaveで保存した様子
