OpenCV + Java = UnsatisfiedLinkError

31,086

Solution 1

in your second example , you skipped this line

 System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

so the opencv libs werent loaded, UnsatisfiedLinkError, etc...

[edit]:

thanks to @Jishnu Prathap for highlighting the java.library path issue, if you run into problems setting that, you can still try to use an absolute path to the java wrapper so/dll/dylib like:

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

Solution 2

I had a similar error while using OpenCV with java.I did 2 things to resolve it.

  1. static{ System.loadLibrary(Core.NATIVE_LIBRARY_NAME); }
  2. I added the path to OpenCV dll or .so to javalibpath or path. which actually didnt work for some reason and i ended up putting the OpenCV dll in the system32 folder.

Solution 3

Try the below code

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

import nu.pattern.OpenCV;

public class OpencvMain {

public static void main( String[] args )
   {

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

}

Solution 4

For general users using opencv3.x:

HighGUI module does not exist anymore in Java for opencv 3.0 and above.

import org.opencv.videoio.VideoCapture;

instead of

import org.opencv.highgui.VideoCapture;

videoio includes VideoCapture, VideoWriter.

Similarly:

imgcodecs includes imread/imwrite and friends

Example:

Highgui.imread(fileName)

-->

 Imgcodecs.imread(fileName)
Share:
31,086
Admin
Author by

Admin

Updated on July 23, 2022

Comments

  • Admin
    Admin almost 2 years

    I need capture a video stream from my USB webcam, for this i use Opencv 2.4.6 for developing in Java. I follow the steps listed in here

    I add the "C:\opencv\build\java\x64" dir to my System PATH and include the "opencv-246.jar" file into my libraries on ECLIPSE. When y run the 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());
        }
    }
    

    i get

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

    OK =)

    but when i run

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

    i get

    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)
    

    i add all the routes containes in:

    C:\opencv\build\x64\vc10

    one by one,but doesn`t work.

    Finally i create a variable called OPENCV_DIR with C:\opencv\build\x64\vc10 but still getting UnsatisfiedLinkError.

    PLEASE HELP ME!