質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

4684閲覧

Pythonによる画像保存で、同じファイル名での再保存(出力)できません。

TomoWata

総合スコア1

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

1クリップ

投稿2020/12/21 02:46

編集2020/12/21 04:30

前提・実現したいこと

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/ツールのバージョンなど)

Python3.8.5
出力画像のイメージです。(テスト的に6ファイルのみ表示。色がない画像も正常な結果です。)
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2020/12/21 02:49

このままではコードが読めないので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
TomoWata

2020/12/21 03:15

大変失礼いたしました。修正させて頂きました。
guest

回答1

0

ベストアンサー

もしかして出来た画像をエクスプローラーなどで表示しながら上書きしようとしていませんか?エクスプローラーのサムネイル表示はファイルハンドルを独占してしまう悪癖があった記憶があります。

投稿2020/12/27 21:41

A_kirisaki

総合スコア2853

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TomoWata

2020/12/28 03:08

ご回答ありがとうございます。仰る通り表示しながら上書きをしようとしていました。念のために”plt.show()”をコメントアウトし、”plt.ioff()”インタラクティブな表示もオフにしたところ、上書きができました。ありがとうございます。なお、私が最も基本的なことをできておらず、WSLで作成した画像をWindowsのフォルダから、Windowsの動作と同様にファイルを選択して削除したのも問題でした。”rm”コマンドで削除したところ同ファイル名での作成も問題なくできました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問