web-dev-qa-db-fra.com

OpenCV + Java = UnsatisfiedLinkError

J'ai besoin de capturer un flux vidéo à partir de ma webcam USB. Pour cela, j'utilise Opencv 2.4.6 pour le développement en Java. Je suis les étapes listées dans ici

J'ajoute le répertoire "C:\opencv\build\Java\x64" à mon PATH système et inclut le fichier "opencv-246.jar" dans mes bibliothèques sur Eclipse. Quand tu cours l'explame 

import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;

public class Main {
    public static void main(String[] args) {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        Mat m  = Mat.eye(3, 3, CvType.CV_8UC1);
        System.out.println("m = " + m.dump());
    }
}

je reçois 

m = [1, 0, 0;
  0, 1, 0;
  0, 0, 1]

OK =)

mais quand je cours 

import org.opencv.highgui.VideoCapture;

public class Main {
    public static void main(String[] args) {
        VideoCapture vc = new VideoCapture(0);
        if(vc.isOpened()){
            System.out.println("Works!");
        }
    }
}

je reçois 

Exception in thread "main" Java.lang.UnsatisfiedLinkError: org.opencv.highgui.VideoCapture.n_VideoCapture(I)J
    at org.opencv.highgui.VideoCapture.n_VideoCapture(Native Method)
    at org.opencv.highgui.VideoCapture.<init>(VideoCapture.Java:113)
    at Main.main(Main.Java:5)

j'ajoute tous les itinéraires contenus dans:

C:\opencv\build\x64\vc10

un par un, mais ne fonctionne pas.

Enfin, je crée une variable appelée OPENCV_DIR avec C:\opencv\build\x64\vc10 mais obtenant toujours UnsatisfiedLinkError.

AIDEZ-MOI, S'IL VOUS PLAÎT!

19
efmoyano

dans votre deuxième exemple, vous avez sauté cette ligne

 System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

ainsi, les bibliothèques opencv n'étaient pas chargées, UnsatisfiedLinkError, etc ...

[modifier]:

grâce à @Jishnu Prathap pour avoir mis en évidence le problème du chemin Java.library, si vous rencontrez des problèmes, vous pouvez toujours essayer d’utiliser un chemin absolu vers l’enveloppe Java afin de/dll/dylib comme:

 System.load("/path to/our/Java_wrapper");
29
berak

Pour les utilisateurs généraux utilisant opencv3.x:

Le module HighGUI n’existe plus en Java pour les versions 3.0 et ultérieures.

import org.opencv.videoio.VideoCapture;

au lieu de 

import org.opencv.highgui.VideoCapture;

videoio comprend VideoCapture, VideoWriter.

De même:

imgcodecs comprend imread/imwrite et ses amis

Exemple:

Highgui.imread(fileName)

->

 Imgcodecs.imread(fileName)
1
Samira Pouyanfar

Donc, j'avais ce problème aussi et j'ai fait ce que vous avez tous suggéré, cela fonctionnait bien dans mes fenêtres x64, mais dans un x86, cela ne pouvait pas fonctionner.

J'ai enfin trouvé une solution en changeant:

VideoCapture capture = new VideoCapture(0);

for

    VideoCapture capture = new VideoCapture();
    capture.open("resources/vid.MP4");

Je ne sais pas pourquoi cela a fonctionné, mais j'espère que cela pourra aider quelqu'un avec le même problème.

0
Varu

Essayez le code ci-dessous 

import org.opencv.core.CvType; import org.opencv.core.Mat;

import nu.pattern.OpenCV;

classe publique OpencvMain {

public static void main( String[] args )
   {

      OpenCV.loadLocally();
      Mat mat = Mat.eye( 3, 3, CvType.CV_8UC1 );
      System.out.println( "mat = " + mat.dump() );
   }

}

0
Bala