以下、開かれてる画像があればその画像の情報を取得し、開かれている画像がなければ、ファイル選択ダイアログを開いてファイルを読み込む、ImageJ の Python を使ったプログラミングサンプルをお示しします。
プログラミング初心者でも、書きたいプログラムでファイル読込をやらせたいというケースは結構ありますが、ちょっと面倒です。なので、テンプレート的に使えるサンプルコードがあると良いと思って、公開します。
---------------------
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|window = WM.getActiveWindow() 11|if not window: 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 = IJ.getImage() 28| imagename = imp0.getTitle() 29| try: 30| folder = imp0.getOriginalFileInfo().directory 31| except: 32| folder = IJ.getDirectory("Output_directory")
---------------------
1~7行目
ライブラリを読み込みます。ファイルはバイオフォーマットプラグインを使って読み込むことにしているので、それを読み込むとともに、ウィンドウマネージャ、ファイルを新たに読み込むのに使う、ディレクトリチューザやオープンダイアログなどを読み込んでいます。
10行目
現在アクティブなウィンドウがあるかを取得します。
11~25行目
現在開かれた画像がなければオープンダイアログから、ファイル情報を読込み、21行目でバイオフォーマットプラグインでファイルから画像を impsに読み込みます。バイオフォーマットプラグインを使っているのは、ImageJのデフォルトでは、16bitカラー画像を読み込めないからです。カラー8bit以下の画像や単チャンネルモノクロ画像であれば、バイオフォーマットプラグインを使う必要はありません。
因みに、読み込んだ画像のビット深度を判定するには、ImagePlus オブジェクトに、getBitDepth() というメソッドがありますので、
bitdepth = imp0.getBitDepth()
などとやると、ビット深度が取得できます。値は、8, 16 というような整数値になります。
そしてバイオフォーマットプラグインで読むと通常ハイパースタック形式で読み込みますが、例え画像が1枚でも、これは必ず ImagePlus の配列(リスト変数)として読み込まれるので、その1枚目の画像( imps[0] ) を表示させます。
なお、万一ファイル情報が取得できない場合 (24~25行目)、ファイルが選ばれていないとのメッセージを表示します。
26行目以下
ここでは、既に開かれた画像(ウィンドウ)がある場合の処理です。
IJ.getImage() で、現在開かれている画像を imp0 に取得し、画像のタイトルを imagename に取得します。さらに、30行目で開かれている画像のパスやファイル名を取得しますが、失敗した場合はダイアログを開き、ファイルを保存するディレクトリーを指定します。
適宜コピペしてお使いください。なおお分かりかと思いますが上のコードの頭3桁は行番号なので、コピペして使用するときは、頭の行番号部分は削除してご活用ください。