前提・実現したいこと
numpy.ndarrayに格納している64×64の配列をグレースケールの画像として表示、保存をしたいです.(元々配列を二値化、つまり白黒画像にして保存するものだったがグレースケールに変換するバージョンも作りたい)
matplotlibを用いて表示はできているのですが、上下に透過部分が余分に入ってしまいます。
画像1,2枚の保存だけでなくfor文内で実行して数万枚単位で保存をするため、できれば
①外部のトリミングソフトの使用は控えたい
②手作業で右クリックで保存するのではなくて画像の保存まで自動化したい
と考えています。
発生している問題・エラーメッセージ
これ以降、Aが64×64のnumpy.ndarrayだとします
Aには0~1の範囲の値が格納されているとします
plt.figure(figsize=(5, 5)) ax = plt.gca() # get current axis ax.spines["right"].set_color("none") # 右消し ax.spines["left"].set_color("none") # 左消し ax.spines["top"].set_color("none") # 上消し ax.spines["bottom"].set_color("none") # 下消し plt.tick_params(labelbottom=False, labelleft=False, labelright=False, labeltop=False) plt.tick_params(bottom=False, left=False, right=False, top=False) plt.imshow(A, cmap='gray') plt.tight_layout() plt.savefig('IMAGE.png', transparent=True)
↑一応画像は保存できるが余分な透過部分が残ってしまう
該当のソースコード
python
1import numpy as np 2from matplotlib import pyplot as plt 3import cv2 4import copy 5from scipy import signal 6import os 7from PIL import Image 8import numpy as np 9%matplotlib inline 10""" 11ここのfor文で64×64の配列を生成するに記述されている 12""" 13A=np.real(B[i,:,:])#Bの配列内の実数部のみをAに移した 14type(A) 15""" 16元々の二値化する方では以下のようにして二値化画像を保存していた。 17できればこの部分のみを変えて実現したい 18binary=np.real(B[i,:,:]) 19th=0.0 20im_bin=(binary>th)*255 21im_bin2=cv2.bitwise_not(im_bin)+256 22pilImg = Image.fromarray(np.uint8(im_bin2)) 23 24pilImg.save("%03.f"%(i)+".png") 25"""
試したこと
type(A)
↑numpy.ndarray
A
↑array([[0.82116601, 0.81233283, 0.80962479, ..., 0.81859178, 0.82586342,
0.82116601],
[0.81202854, 0.81069888, 0.80997338, ..., 0.82054398, 0.82182087,
0.81202854],
[0.80295631, 0.8081905 , 0.81753533, ..., 0.81573611, 0.81126605,
0.80295631],
...,
[0.81416119, 0.81354811, 0.81656137, ..., 0.81528227, 0.81099825,
0.81416119],
[0.81679137, 0.81531291, 0.81720691, ..., 0.81377625, 0.81838123,
0.81688567],
[0.82116601, 0.81233283, 0.80962479, ..., 0.81859178, 0.82294009,
0.82116601]])
A.shape
↑(64, 64)
type(A[0,0])
↑numpy.float64
plt.figure(figsize=(5, 5)) ax = plt.gca() # get current axis ax.spines["right"].set_color("none") # 右消し ax.spines["left"].set_color("none") # 左消し ax.spines["top"].set_color("none") # 上消し ax.spines["bottom"].set_color("none") # 下消し plt.tick_params(labelbottom=False, labelleft=False, labelright=False, labeltop=False) plt.tick_params(bottom=False, left=False, right=False, top=False) plt.imshow(A, cmap='gray') plt.tight_layout() plt.savefig('IMAGE.png', transparent=True)
↑画像は保存できるが透過部分が残ってしまう。できれば64×64配列の部分のみを保存したい
また、Aのグレースケールは以下のような画像です(plt.imshow(A, cmap='gray')部分)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。