前提・実現したいこと
WindowsのUbuntu環境において、並べた画像を(jpg等)出力する際に出力ファイル名を固定したい考えています。なお、今回用いた画像は384×148のfloat画像です。
■■な機能を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
コードを実行すると画像は表示および保存されるのですが、再度実行すると同じファイル名での保存(作成および上書き)ができません。例えば、(test_time_series_img.jpg)という名前で一度出力した後、同ファイル名(test_time_series_img.jpg)は作成されません。ファイルを削除した後で実行しても同じ結果となります。一方、(test_time_series_img2.jpg)と名前を変えて実行すると作成されます。なお、jpgの代わりにpngやpdfにすると”Segmentation fault”となり正常に画像が出力されません。Tiffは作成できました。実行する度にファイル名を変更するのは現実的ではないため、なんとかしたいと考えております。
●下記は本件とは関係ないと思われますが、表示されるメッセージです。 QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-twatanabe' libGL error: No matching fbConfigs or visuals found libGL error: failed to load driver: swrast
該当のソースコード
#取得した画像を表示して出力する(jpg等で保存する)。" import gc import math import os import numpy as np import matplotlib as mpl import matplotlib.pyplot as plt import rasterio from rasterio.enums import Resampling from rasterio import plot import glob #ディレクトリ名やファイル名等の設定" area_name = 'area' direct_name = '/home/user/' filename = "outoput_image" output = direct_name+area_name+'/OUTPUT/' data_path = input+'/DATA/' ndpath = output+'IMAGE/NDVI/' outpath = output+'RESULT/' # フォルダが存在しない場合に作成する。" def makepath(path): if not os.path.exists(path): os.makedirs(path) # データ入力 (NDVIデータをまとめて読込む) (オリジナル画像:384×148 のGeoTiff画像が複数枚)" data_files = glob.glob(ndpath+'*.tif') data_files.sort() # 画像サイズやリサンプリングを設定" len_num = len(data_files) col = 4 raw =math.ceil(len_num/col) my_dpi = 96 im_col = 148 * (col*2) im_raw = 384 *(col*3) dwscale_factor = 1/2 #縮小サイズ) # 出力キャンバスの設定" fig = plt.figure(figsize=(int(im_raw/my_dpi),int(im_col/my_dpi)), dpi = my_dpi) fig.clf() # 画像の読込とリサンプリング" for i in range(len_num): with rasterio.open(data_files[i]) as src: # resample data to target shape data = src.read( out_shape=( src.count, int(src.height * dwscale_factor), int(src.width * dwscale_factor) ), resampling=Resampling.bilinear #内挿方法 ) # scale image transform transform = src.transform * src.transform.scale( (src.width / data.shape[-1]), (src.height / data.shape[-2]) ) # 画像のプロット位置をシフトさせ配置 plt.subplot(raw, col, i+1) plt.imshow(data[0], clim=(-1, 1), cmap=cm.jet, interpolation='nearest') plt.colorbar() plt.title(data_files[i][-17:-4], fontsize=25)# ファイル名から日付を取得 plt.tight_layout() # 画像の保尊 plt.savefig(outpath+filename+"_time_series_img.jpg", dpi=my_dpi) # 画像表示 plt.show() # メモリ開放 plt.cla() fig.clf() plt.close('all') plt.close(fig) gc.collect()
試したこと
メモリの問題と思い、メモリ解放”gc.collect()”等を設定したりswapoff等を実行してみましたが、変化はありません。
補足情報(FW/ツールのバージョンなど)
回答1件
あなたの回答
tips
プレビュー