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!
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");
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)
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.
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() );
}
}