1

javacvを使用してJavaでモーション検出コードをコーディングしました。Windowsで完全に実行されていますが、Ubuntu 13.04ではこのようなエラーが表示されます。これに対する解決策を提案してください。コードも添付しています

コード

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package demo;

/**
 *
 * @author Admin
 */
import com.googlecode.javacpp.Loader;
import com.googlecode.javacv.*;
import static com.googlecode.javacv.cpp.opencv_core.*;
import static com.googlecode.javacv.cpp.opencv_imgproc.*;
import static com.googlecode.javacv.cpp.opencv_calib3d.*;
import static com.googlecode.javacv.cpp.opencv_objdetect.*;

public class Demo {
    public static void main(String[] args) throws Exception {
        OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);
        grabber.start();

        IplImage frame = grabber.grab();
        IplImage image = null;
        IplImage prevImage = null;
        IplImage diff = null;

        CanvasFrame canvasFrame = new CanvasFrame("Original stream");
        canvasFrame.setCanvasSize(frame.width(), frame.height());

        CanvasFrame editFrame = new CanvasFrame("Edited stream");
        canvasFrame.setCanvasSize(frame.width(), frame.height());

        CvMemStorage storage = CvMemStorage.create();

        while (canvasFrame.isVisible() && (frame = grabber.grab()) != null) {
            //cvSmooth(frame, frame, CV_GAUSSIAN, 9, 9, 2, 2);
            if (image == null) {
                image = IplImage.create(frame.width(), frame.height(), IPL_DEPTH_8U, 1);
                //cvCvtColor(frame, image, CV_RGB2GRAY);
            } else {
                prevImage = IplImage.create(frame.width(), frame.height(), IPL_DEPTH_8U, 1);
                prevImage = image;
                image = IplImage.create(frame.width(), frame.height(), IPL_DEPTH_8U, 1);
                cvCvtColor(frame, image, CV_RGB2GRAY);
            }

            if (diff == null) {
                diff = IplImage.create(frame.width(), frame.height(), IPL_DEPTH_8U, 1);
            }

            if (prevImage != null) {
                // perform ABS difference
                cvAbsDiff(image, prevImage, diff);
                // do some threshold for wipe away useless details
                cvThreshold(diff, diff, 64, 255, CV_THRESH_BINARY);

                canvasFrame.showImage(frame);
                editFrame.showImage(diff);

            }
        }
        grabber.stop();
        canvasFrame.dispose();
    }
}

出力:

sx=158sy=37w=350h=350op7 スレッド「メイン」での例外 java.lang.UnsatisfiedLinkError: /tmp/javacpp94368173067/libjniopencv_core.so: libopencv_core.so.2.4: 共有オブジェクト ファイルを開けません: Java にそのようなファイルまたはディレクトリはありません。 lang.ClassLoader$NativeLibrary.load(Native Method) at java.lang.ClassLoader.loadLibrary1(ClassLoader.java:1957) at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1882) at java.lang.ClassLoader.loadLibrary( ClassLoader.java:1843) で java.lang.Runtime.load0(Runtime.java:795) で java.lang.System.load(System.java:1061) で com.googlecode.javacpp.Loader.loadLibrary(Loader.java) :566) com.googlecode.javacpp.Loader.load(Loader.java:489) で com.googlecode.javacpp.Loader.load(Loader.java:431) で com.googlecode.javacv.cpp.opencv_core.(opencv_core) .java:136) java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:270) at com.googlecode.javacpp.Loader.load(Loader.java:453) at com.googlecode.javacv.cpp.opencv_imgproc. (opencv_imgproc.java:97) で java.lang.Class.forName0(ネイティブ メソッド) で java.lang.Class.forName(Class.java:270) で com.googlecode.javacpp.Loader.load(Loader.java:453) ) com.googlecode.javacv.cpp.opencv_highgui.(opencv_highgui.java:85) で com.googlecode.javacv.OpenCVFrameGrabber.start(OpenCVFrameGrabber.java:174) で demo1.Demo1.main(Demo1.java:187) で投稿者: java.lang.UnsatisfiedLinkError: java.lang.ClassLoader.loadLibrary(ClassLoader.java:1878) の java.library.path に opencv_core がありません java.lang.Runtime.loadLibrary0(Runtime.java:849) の java.lang. com.googlecode.javacpp.Loader の .System.loadLibrary(System.java:1087)。loadLibrary(Loader.java:593) at com.googlecode.javacpp.Loader.load(Loader.java:481) ... 12 以上 Java 結果: 1 ビルド成功 (合計時間: 0 秒)

4

2 に答える 2

1

つまり、ネイティブの依存関係を見つけることができないということです。JavaCV は内部で JNI 呼び出しを使用して、OpenCV dll を使用します。Windows では、依存関係はパスにありました (複数の理由が考えられます。opencv は環境変数または一部のリソースにある可能性があります)。

Linux の場合は、次の手順をお勧めします: https://code.google.com/p/javacv/

于 2013-08-01T11:25:39.573 に答える
1

ターミナルで「echo $PATH」コマンドを試して、マシン上の opencv*.dll ファイルへのパスが存在するかどうかを確認してください。

于 2013-11-04T01:48:56.547 に答える