ImageJからOpenCV4.7.0以降を利用しよう!

 27th April 2024 at 10:20pm

JAVA版のOpenCV4.7.0以降をImageJで扱うには以下の2点の問題がありました。

(1) JDK11以降が必要

ImageJで利用しているのはJDK8です。。。

(2) JAVA9以降で発生する不正なリフレクトアクセス警告

JAVA9以降、プラグイン内で以下の関数を実行するとエラーが発生するようになってしまいました。

System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

「WARNING: An illegal reflective access operation has occurred・・・」というエラーが発生してしまうのです。

この2点の問題で右往左往しましたが(古い記事)、JAVA17で問題なく動作することが分かりました。

OpenCV 4.9.0で動作することを確認しました。(2024年1月)

JAVA16・JAVA17あたりで、JAVAのリフレクションの仕様が変わったようです。

ij.jarについて

最新の「ij.jar」であれば、Java17で起動することが可能です。ただし、「ImageJ.exe」からは起動できません。

ImageJ.batを以下の内容で作成し(JDK17のbinフォルダのパスを環境変数PATHに追加して下さい)、batファイルで起動してください。

start javaw -jar ij.jar

全ての機能が正常動作するかを、確認したわけではありません。注意してください。

こちらの記事を参考にして、「Launch4j」でImageJ.exeを作成するのも良いかもしれません。

最近、他のインストーラ、OSのアップデートのせいで参照するJavaのバージョンがよく変わってしまいます。

環境変数PATHの先頭に以下のようなパスが。。。

C:\Program Files\Eclipse Adoptium\jre-8.0.392.8-hotspot\bin

これではJava8で起動してしまいます。私は削除してしまいます。(心配であれば一番下に移動しましょう。)

NetBeansによるビルド時の設定

私の自作プラグイン「IJToolsUsingOpenCV」のビルド方法を例に説明します。

こちらの「master」ブランチの0.9.41.0以降をダウンロードしてください。(0.9.101.0は使わないでください)

NetBeansがプロジェクトを管理するフォルダに展開したフォルダをコピーします。

(インポートも可能です)

フォルダのルートに「ij.jar」と、「opencv-000.jar」「opencv_java000.dll」をコピーします。

NetBeansを起動します。

NetBeansのプラットホームに「JDK[空白]17」が必要なので、無い場合は作成します。

ツール ⇒ Javaプラットホーム ⇒ 追加

最後のプラットホーム名を「JDK[空白]17」にします。以下の画像では11になってますが。。。

ファイル ⇒ プロジェクトを開く ⇒ 展開したフォルダ選択します。

プロパティを編集します。

まず、ライブラリで「ij.jar」「opencv-000.jar」を追加します。

実行⇒プロジェクトを消去してビルド

正常にビルドできれば、IJToolsUsingOpenCVプラグインが作成されます。

で実行します。

とりあえず、OpenCV4.7.0以降をImageJで利用することができそうです。

こちらのバージョン0.9.41.以上のバイナリーを利用することも可能です。(0.9.101.0は使わないでください。試行錯誤していた時のものです。)


HomeへImageJの記事Topへ