10

Windows 7 を使用していますが、opencv ライブラリを使用する Java プロジェクトを実行しようとすると、次の例外が発生します。

Exception in thread "main" 
java.lang.UnsatisfiedLinkError: no opencv_java in java.library.path
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at org.opencv.highgui.Highgui.<clinit>(Highgui.java:416)
at teste.main(teste.java:21)

私は何を間違えましたか?一部のインポートが欠落していますか?

openCV を使用する Eclipse (Android ではない) で単純な Java プロジェクトを作成したいと考えています。

  • そこで、OpenCV-2.4.2.exe ファイルから C:\ に javacv を抽出しました。
  • 次に、「cmake -G "MinGW Makefiles" -DBUILD_opencv_java=ON C:\opencv」コマンドを実行し、その後「mingw32-make」を実行しました。すべてがエラーや警告なしでビルドされました
  • 環境変数にopencv dllを追加した後
4

6 に答える 6

6

この例外は、システムが OpenCV がこの特定のプラットフォームに必要とするネイティブ ライブラリを見つけようとしているが、見つからないために発生します。

Exception in thread "main" 
java.lang.UnsatisfiedLinkError: no opencv_java in java.

このエラーを解決するには:

  1. opencv バージョン< opencv 2.4.6を使用している場合は、@ user3033420 からの回答が解決策です。
  2. バージョン>= opencv 2.4.6を使用している場合、jar にはNATIVE_LIBRARY_NAMEという名前のCore クラスに定数変数があり、これを FaceDetector クラスの関数に渡して opencv の機能をプロジェクトに含めることができます。これはおそらく既に持っています。loadLibrary()

    System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
    

上記の名前付き定数を使用すると、見知らぬ dll ファイルの名前を覚えておく必要はありません。

opencv 2.4.9.jarプロジェクト設定からビルド パスに次のように追加します。

Window -> Preferences -> Java Build Path –&gt; Add Library -> User Libraries -> 
User Library -> & click New

以下のようなダイアログが表示されます。ライブラリ名として opencv-2.4.9 を追加し、 [OK] をクリックします。

新しいユーザー ライブラリの作成

次にAdd External Jar、opencv jar を見つけて、[OK] をクリックします。次に、opencv-2.4.9.jar を展開し、以下に示すように [ Native Library Location (None) ] をクリックします。

OpenCV のネイティブ ライブラリの場所を追加する

必要な手順:「opencv-2.4.9」で使用されるネイティブ ライブラリを含むフォルダーの場所を入力し、以下に示すように [OK] をクリックします。

ネイティブ ライブラリ フォルダーの構成

これで、jar には、作業を行うために必要なすべてのネイティブ ライブラリが含まれるようになりました。Java プログラムを再構築すると、すべてが設計どおりにコンパイルおよび実行されるはずです。

于 2014-08-04T12:52:32.993 に答える
5

このエラーが発生した場合:

Exception in thread "main" 
java.lang.UnsatisfiedLinkError: no opencv_java in java.library.path

それはおそらく、腰から撮影し、ブラウン運動でプログラミングし、openCV を機能させようとしていることを意味します。すべてのボタンを猛烈に押して、飛行機が飛行中にどのように機能するかを理解しようとするようなものです。あなたは悪い時間を過ごすつもりです。

エラーの意味:

Eclipse は、jar ファイルがそのジョブを実行するために必要なライブラリーを見つけることができないことを伝えています。したがって、当然、それらを利用可能にするまでは機能しません。特定のプラットフォーム (Windows、Mac、Linux など)、(32 ビット、64 ビットなど) で「ソースから openCV をビルドする方法」に関するチュートリアルを見つける必要があります。

基本的に、「ネイティブ ライブラリの場所」の設定を見落としているか、正しく設定していないため、jar は で記述されたサポート ライブラリを見つけることができませんC

どうすれば修正できますか、千フィートビュー:

  1. お使いのオペレーティング システム用の openCV のソース コードをダウンロードします。
  2. 指示に従って、ソースから openCV をビルドします。
  3. jar を Java プロジェクトの lib ディレクトリにコピーします。
  4. build/lib「ネイティブ ライブラリの場所」を、ソースから openCV をビルドしたパスの下のディレクトリに 設定して、ネイティブ ライブラリを探すように jar を構成します。
  5. Java プロジェクトをクリーン ビルドすると、UnsatisfiedLinkError はなくなるはずです。

このブログでは、上記の手順について順を追って説明しています: https://udallascs.wordpress.com/2014/03/30/adding-opencv-and-configuring-to-work-with-eclipse-and-java /

なぜこれを単純な jar にできないのでしょうか。

openCV のほとんどはCプログラミング言語で書かれているためです。使用している jar ファイルは、その C の世界への窓にすぎません。つまり、ルーブ・ゴールドバーグ・マシンです。この種のことは、実際の仕事の世界のいたるところで見られるので、ここで教育を受けていることに注意してください.

于 2015-03-17T00:57:50.317 に答える
0

この関数loadlibraryは、PATH 変数で DLL の名前を見つけようとします。DLL 名を確認してください。あなたも試すことができますSystem.loadLibrary(Core.NATIVE_LIBRARY_NAME);

于 2016-01-29T23:34:30.520 に答える
0

その場合、opencv dll ファイルがインストールされている場所への jvm のパスを次のように指定する必要があります。 -Djava.library.path="C:\opencv\build\java\x64" としてコードを追加します。 Core.NATIVE_LIBRARY_NAME); 私は自分のネットビーンズ側でこれを試してみて、私の問題は解決しました。

于 2017-08-11T12:40:15.497 に答える