質問するログイン新規登録

Q&A

1回答

3649閲覧

JavaCV(OpenCV)をEclipse + Mavenで使えるようにしたい

uer03108

総合スコア194

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2022/02/14 13:33

0

0

こんにちは。
JavaCV(OpenCV)をEclipse + Mavenで使用できる様に環境構築しております。
Mavenを使用しない場合の設定手順は、こちらに書かれているのですが、使用した方が便利なので、色々と試しているのですが上手くいきません。

参考にしているサイトは、下記になります。
Mavenを利用して、好きなJavaライブラリを環境に追加する。

サイトに習って、下記をpomファイルに追記しました。

pom.xml

1 <dependency> 2 <groupId>org.bytedeco</groupId> 3 <artifactId>javacv-platform</artifactId> 4 <version>1.4.2</version> 5 </dependency> 6 <dependency> 7 <groupId>org.bytedeco.javacpp-presets</groupId> 8 <artifactId>opencv-platform</artifactId> 9 <version>3.4.2-1.4.2</version> 10 </dependency> 11 <dependency> 12 <groupId>org.bytedeco.javacpp-presets</groupId> 13 <artifactId>ffmpeg-platform</artifactId> 14 <version>4.0.1-1.4.2</version> 15 </dependency>

ソースコードは下記になりますが、途中でエラーが発生しました。

Main.java

1package main; 2 3import java.io.IOException; 4 5import org.opencv.core.Mat; 6import org.opencv.core.Size; 7import org.opencv.imgcodecs.Imgcodecs; 8import org.opencv.imgproc.Imgproc; 9 10public class Main { 11 12 public static void main(String[] args) throws IOException { 13 14 // 15 //System.loadLibrary(Core.NATIVE_LIBRARY_NAME); //必要なのか不明 16 17 //ルートパス 18 String pathRoot = System.getProperty("user.dir"); 19 20 //ファイルパス 21 String pathFileFrom = pathRoot + "/src/sample.jpg"; 22 String pathFileTo = pathRoot + "/src/sampleOut.jpg"; 23 24 //マトリックス 25 Mat matFrom = Imgcodecs.imread(pathFileFrom); //<---- エラー発生 26 Mat matTo = Imgcodecs.imread(pathFileTo ); 27 28 //サイズ 29 int sizeX = 200; 30 int sizeY = 200; 31 32 //リサイズ 33 Imgproc.resize(matFrom, matTo, new Size(sizeX, sizeY)); 34 35 //保存 36 Imgcodecs.imwrite(pathFileTo, matTo); 37 } 38}

エラー内容は下記になります。

error.txt

1Exception in thread "main" java.lang.UnsatisfiedLinkError: org.opencv.imgcodecs.Imgcodecs.imread_1(Ljava/lang/String;)J 2 at org.opencv.imgcodecs.Imgcodecs.imread_1(Native Method) 3 at org.opencv.imgcodecs.Imgcodecs.imread(Imgcodecs.java:127)

jarファイルは、mavenから参照しているので追加の必要はないのかなと思ったのですが、どなたか原因が分かる方、ご教授頂けると幸いです。

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

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

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

guest

回答1

0

Exception in thread "main" java.lang.UnsatisfiedLinkError: org.opencv.imgcodecs.Imgcodecs.imread_1(Ljava/lang/String;)J
at org.opencv.imgcodecs.Imgcodecs.imread_1(Native Method)

UnsatisfiedLinkError

Java仮想マシンが、nativeと宣言されたメソッドの適切なネイティブ言語の定義を見つけることができない場合にスローされます。

JavaCVは、OpenCVをJNIを利用して呼び出しているようです。だから、「必要なのか不明」な部分は必要でしょう。

java

1 //System.loadLibrary(Core.NATIVE_LIBRARY_NAME); //必要なのか不明

先日私もJavaCVをいじっていたのですが、Core.NATIVE_LIBRARY_NAMEの部分は手元の環境と異なるものとなっていました。別途インストールしたOpenCVの、dllなりsoファイルの在り処を確認して、System.loadLibrary("....")とする必要がありました。ちなみにわたしは、IntelliJ+gradleの環境でしたが。参考まで。

投稿2022/02/14 14:01

shiketa

総合スコア4164

uer03108

2022/02/15 03:24

ご回答ありがとうございます。 一応、公式のマニュアル通りにOpenCVをダウンロードして、jarを手動で設定した後、 System.loadLibrary(Core.NATIVE_LIBRARY_NAME); も有効にして実行すると問題なく動作しました。 ですが、これだとmavenは記述しなくても動作する様でした。 手動設定をお行う代わりにmavenを使用するのかなと思っていたのですが。 その辺りが?です。 取り合えず、動作はする様になりましたので、助かりました。 有難うございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.29%

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

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

質問する

関連した質問