省型旧形国電の残影を求めて

戦前型旧形国電および鉄道と変褪色フィルム写真を中心とした写真補正編集の話題を扱います。他のサイトでは得られない、筆者独自開発の写真補正ツールや補正技法についても情報提供しています。写真補正技法への質問はコメント欄へどうぞ

ImageJ / Python プログラミング Tips: 画像読み込みテンプレート改定

 以前、以下の記事でImageJ用画像読み込みテンプレートを公開しました。

yasuo-ssi.hatenablog.com

 ところが、plugin メニューのコントロールパネルからプラグインとして起動すると、問題が起こることに気が付きました*1。というのは、コントロールパネルを開くとそれもウィンドウとして認識されます。するとすでに画像が開かれているものと錯覚してエラーになってしまうことに気づきました。

 開かれているウィンドウがあるかどうかですでに画像があるかどうかを判断していたので、コントロールパネルと画像を区別できないためです。

 そこで、すでに開いているウィンドウがあるかどうかで判断するのではなく、開いている画像があるかどうかで判断するようコードを改定してみました。今回は、WindowManager の getCurrentImage() メソッドを使っています。

-----------------------------------------------

1 |from ij import IJ, ImagePlus
2 |from ij import WindowManager as WM
3 |from ij.io import DirectoryChooser, OpenDialog
4 |from loci.plugins import BF
5 |import os
6 |from org.python.core import codecs
7 |codecs.setDefaultEncoding('utf-8')
8 |
9 |
10|imgCurrent = WM.getCurrentImage()
11|if not imgCurrent:
12|    od = OpenDialog("Choose a file")
13|    folder = od.getDirectory()
14|    filename = od.getFileName()
15|    if filename:
16|        path = folder + filename
17|        IJ.log(path)
18|        IJ.log(folder)
19|        IJ.log(filename)
20|# Always Open file with Bio-format Plugin
21|        imps = BF.openImagePlus(folder + filename) 
22|        imp0 = imps[0] #imp0: Original Image 
23|        imp0.show()
24|    else:
25|        IJ.showMessage("File is not selected.")
26|else: # target image is already open
27|    imp0 = imgCurrent
28|    imagename = imp0.getTitle()
29|    try:
30|        folder = imp0.getOriginalFileInfo().directory
31|    except:
32|        folder = IJ.getDirectory("Output_directory")  

-----------------------------------------------

 なお、このコードでは、読み込まれた画像は imp0 (ImagePlus) に、画像が保存されているディレクトリ(フォルダ) 名は folder に、ファイル名は、filename に、画像名は imagename に取得されます。前と同じようにすでに開いた画像がある場合はその画像をimp0 として取得し、開いた画像がない場合は、新に bioformat importer を通して、新しいファイルを読み込み、それを imp0 として取得します。

 

*1:なお、コントロールパネルからプラグインを開く必要性については、以下の記事をご覧ください。

yasuo-ssi.hatenablog.com WindowsMac OS 上では、使う必要はないと思いますが、Linux 上では使う必要があるケースが多いと思います。