Javacvを使用してJavaでOpenCVを使用します
質問
私は必死になっています!!私は使用しようとしています opencv の ジャワ, 、 経由 Javacv (JNAがJavaのOpenCVをラップする)。
私はオンです Mac OS X 1.5.
OPENCVをインストールし、含まれる例をコンパイルして実行できます。それがうまくいきます。
今、私は開きます 日食, 、ここで説明するように、新しいプロジェクトを作成します。http://code.google.com/p/javacv/
その新しいプロジェクトでは、OPENCV関数を呼び出す小さなクラスのみ(サンプルコードを使用しました):
import static name.audet.samuel.javacv.jna.cxcore.*;
import static name.audet.samuel.javacv.jna.cv.*;
import static name.audet.samuel.javacv.jna.highgui.*;
import static name.audet.samuel.javacv.jna.cvaux.*;
public class Test {
public static void main(String[] args) {
IplImage image = cvLoadImage("test.png", 1);
if (image == null) {
System.err.println("Could not load image file.");
} else {
cvSmooth(image, image, CV_GAUSSIAN, 3, 0, 0, 0);
// ...
}
}
}
実行すると、次のエラーがあります。
スレッドの例外「メイン」java.lang.unsatisfiedlinkerror:ライブラリをロードできません 'cxcore':dlopen(libcxcore.dylib、9):画像が見つかりません
どうぞ、助けが必要です、私は何時間もグーグルを見ました、私はもうどこを探すべきかわかりません。
解決
SVNバージョンがJavacvと互換性がないことが判明しました。
最新の公式バージョン(2.1)をダウンロードしてコンパイルしてインストールしました。
他のヒント
これら2つのライブラリをリンクする必要があります。
- javacpp.jar
- javacv.jar
Javacv/lib-opencv/win_x86_64では、次のようなファイルを持っている必要があります。
- msvcp100.dll
- msvcr100.dll
- opencv_core220.dll
- opencv_calib3d220.dll
- ...
これらのdllは、プラットフォーム用にコンパイルする必要があります(32 / win 64 / linux / etc。
OPNECV DLLファイルへのパスを定義する必要があります。
-Djava.library.path=lib-opencv/win_x86_64/
- or the DLLs have to be somewhere in your system PATH of your operating system
OPは、あらゆる種類の問題が木工品からrawい始めることを示唆しているため、私はしばらくこの問題を見ていました。 JavaでOPENCVプロジェクトを設定するための比較的痛みのない体験を考え出すことができるように、私は大量のStackoverFlowの投稿を経験しました。私はJavacvを経験しましたが、それが私のニーズを満たしていないことがわかりました。ただし、OpenCV投稿(C ++投稿)で参照される機能を直接実装することができましたが、特定のJavaCppバージョンを使用したときにJava言語で実装することができました。 JavaCppは、ユーザーがいる環境原産でなければならないコンパイルされたC ++ライブラリに依存しているため、コンピレーションの問題もたくさんありました(Java Landに住んでいる人々が対処したくない)。とにかく、私はメイベンと一緒に構築し、環境を築くことができました。 Eclipseを使用していますが、これは他のプログラミング環境で正常に機能するはずです。ブートストラッププロジェクトの構築を開始して動作を開始する方法を説明するために、プロジェクトの例を掲載しました。プロジェクトは、URLを与えられた2つの画像を比較します。これは平等テストであり、画像が同一かどうかを示しています。うまくいけば、これがこの環境でのセットアップと作業に役立つことを願っています。JavaでOpenCVを使用しようとしたときに私が遭遇した多くの落とし穴を避けることができます(私はその時点で精神的にOPとまったく同じ場所にいました:))。