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.
-
static{ System.loadLibrary(Core.NATIVE_LIBRARY_NAME); }
- 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)