java opencv video-capture unsatisfiedlinkerror

OpenCV+Java=UnsatisfiedLinkError



video-capture (5)

Entonces, yo también tenía este problema e hice lo que todos sugerían, funcionó bien en mis ventanas x64, pero en un x86 no podía hacer que funcionara.

Por fin encontré una solución cambiando:

VideoCapture capture = new VideoCapture(0);

para

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

No sé por qué funcionó, pero espero que pueda ayudar a alguien con mi mismo problema.

Necesito capturar un flujo de video desde mi cámara web USB, para esto uso Opencv 2.4.6 para desarrollar en Java. Sigo los pasos listados here

Agrego el directorio "C: / opencv / build / java / x64" a mi PATH del sistema e incluyo el archivo "opencv-246.jar" en mis bibliotecas en ECLIPSE. Cuando corres la prueba

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

yo obtengo

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

OK =)

pero cuando corro

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

yo obtengo

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)

Añado todas las rutas contenidas en:

C: / opencv / build / x64 / vc10

Uno por uno, pero no funciona.

Finalmente, creo una variable llamada OPENCV_DIR con C: / opencv / build / x64 / vc10 pero aún obteniendo UnsatisfiedLinkError.

¡POR FAVOR, AYÚDAME!


Pruebe el siguiente código

importar org.opencv.core.CvType; importar org.opencv.core.Mat;

importar nu.pattern.OpenCV;

clase pública OpencvMain {

public static void main( String[] args ) { OpenCV.loadLocally(); Mat mat = Mat.eye( 3, 3, CvType.CV_8UC1 ); System.out.println( "mat = " + mat.dump() ); }

}


Tuve un error similar al usar OpenCV con java. Hice 2 cosas para resolverlo.

  1. static{ System.loadLibrary(Core.NATIVE_LIBRARY_NAME); }
  2. Agregué la ruta a OpenCV dll o .so a javalibpath o ruta. que en realidad no funcionó por alguna razón y terminé poniendo la DLL de OpenCV en la carpeta system32 .

en tu segundo ejemplo, te saltaste esta línea

System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

por lo que no se cargaron los archivos opencv, UnsatisfiedLinkError, etc ...

[editar]:

gracias a @Jishnu Prathap por resaltar el problema de la ruta java.library, si tiene problemas para configurarlo, aún puede intentar usar una ruta absoluta al contenedor java, por lo que / dll / dylib como:

System.load("/path to/our/java_wrapper");


Para usuarios generales que usan opencv3.x:

El módulo HighGUI ya no existe en Java para opencv 3.0 y superior.

import org.opencv.videoio.VideoCapture;

en lugar de

import org.opencv.highgui.VideoCapture;

videoio incluye VideoCapture, VideoWriter.

Similar:

imgcodecs incluye imread / imwrite y amigos

Ejemplo:

Highgui.imread(fileName)

->

Imgcodecs.imread(fileName)