Java OpenCV from Maven

后端 未结 8 1934
别那么骄傲
别那么骄傲 2020-12-01 20:59

Is there any way to get OpenCV from repository? Which artifact should I add to pom.xml? Every tutorial I\'d found is from \'14 and it seems like something chang

相关标签:
8条回答
  • 2020-12-01 21:19

    All you need: install jar in local maven repository with:

    mvn install:install-file -Dfile=C:\opencv411\build\java\opencv-411.jar -DgroupId=org -DartifactId=opencv -Dversion=4.1.1 -Dpackaging=jar
    

    create a dependency in pom.xml:

     <dependency> 
     <groupId>org</groupId> 
     <artifactId>opencv</artifactId>
     <version>4.1.1</version>  
    </dependency> 
    

    Now that jar is on, we need to somehow add the OpenCV libraries. I did this by adding the lib folder in java.library.path to the maven-surefire plugin:

    <plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-surefire-plugin</artifactId>
     <version>2.22.2</version>
     <configuration>
      <argLine>-Djava.library.path=${project.build.outputDirectory}/lib</argLine>
     </configuration>
    </plugin>
    
        public static void main(String[] arges) throws MalformedURLException, 
    IOException, Exception {
        loadLibraries();
    
        // create and print on screen a 3x3 identity matrix
        System.out.println("Create a 3x3 identity matrix...");
        Mat mat = Mat.eye(3, 3, CvType.CV_8UC1);
        System.out.println("mat = " + mat.dump());
    
        // prepare to convert a RGB image in gray scale
        String location = "resources/Poli.jpg";
        System.out.print("Convert the image at " + location + " in gray scale... ");
        // get the jpeg image from the internal resource folder
        Mat image = Imgcodecs.imread(location);
        // convert the image in gray scale
        Imgproc.cvtColor(image, image, Imgproc.COLOR_RGB2GRAY);
        // write the new image on disk
        Imgcodecs.imwrite("resources/Poli-gray.jpg", image);
        System.out.println("Done!");
    
    }
    
        private static void loadLibraries() {
    
        try {
            InputStream in = null;
            File fileOut = null;
            String osName = System.getProperty("os.name");
    //            String opencvpath = System.getProperty("user.dir");
            String opencvpath = "C:\\opencv411\\build\\java\\";
            if (osName.startsWith("Windows")) {
                int bitness = Integer.parseInt(System.getProperty("sun.arch.data.model"));
                if (bitness == 32) {
                    opencvpath = opencvpath + "\\x86\\";
                } else if (bitness == 64) {
                    opencvpath = opencvpath + "\\x64\\";
                } else {
                    opencvpath = opencvpath + "\\x86\\";
                }
            } else if (osName.equals("Mac OS X")) {
                opencvpath = opencvpath + "Your path to .dylib";
            }
            System.out.println(opencvpath);
    //        System.out.println("Core.NATIVE_LIBRARY_NAME = " + Core.NATIVE_LIBRARY_NAME);
            System.out.println("Core.NATIVE_LIBRARY_NAME = " + "opencv_java411.dll");
    //        System.load(opencvpath + Core.NATIVE_LIBRARY_NAME + ".dll");
            System.load(opencvpath + "opencv_java411.dll");
        } catch (Exception e) {
            throw new RuntimeException("Failed to load opencv native library", e);
        }
    }
    
    0 讨论(0)
  • 2020-12-01 21:19

    For windows there was a problem with @Sachin Aryal's answer. The answer by @Anirban Chakraborty is a very good hint. But, there was still issues at runtime as described in this thread.

    Finally replacing OpenCV.loadShared(); with OpenCV.loadLocally(); worked for me.

    0 讨论(0)
  • 2020-12-01 21:32

    Add the following dependency in your POM file:

    <dependency>
        <groupId>org.openpnp</groupId>
        <artifactId>opencv</artifactId>
        <version>3.2.0-0</version>
    </dependency>
    

    and replace the following lines:

    System.loadLibrary(Core.NATIVE_LIBRARY_NAME)
    

    with

    nu.pattern.OpenCV.loadShared();
    

    This should solve the problem in WINDOWS also. Happy Coding.

    0 讨论(0)
  • 2020-12-01 21:37

    This worked for me.

    nu.pattern.OpenCV.loadLibrary();
    

    I'm using following maven dependency

    <dependency>
      <groupId>nu.pattern</groupId>
      <artifactId>opencv</artifactId>
      <version>2.4.9-4</version>
    </dependency>
    
    0 讨论(0)
  • 2020-12-01 21:38

    Just use it nu.pattern.OpenCV.loadShared();

    write a class with this static void method

    class Test {
    public static void loadOpenCVNativeLibrary() {
    nu.pattern.OpenCV.loadShared();
    }
    }
    

    and after call it in your application class (with static main) for web application (spring boot for example) like this

    static {
    Test.loadOpenCVNativeLibrary();
    }
    ...
    public static void main(String[] args) throws UnknownHostException {
    }
    
    0 讨论(0)
  • 2020-12-01 21:41

    Try this, see if it works:

    • nu.pattern.OpenCV.loadShared();
    • System.loadLibrary(org.opencv.core.Core.NATIVE_LIBRARY_NAME);

    More info here in API section: https://github.com/patternconsulting/opencv

    Also have 2.4.9-7 opencv dependency.

    0 讨论(0)
提交回复
热议问题