如何将OpenCV库添加到动态Web项目中



目前,我正在构建一个Java web项目,该项目使用Opencv来检测相似的图像。但当我运行时,我总是收到这个错误

java.lang.UnsisfiedLinkError:应为库:opencv_java249 java.lang.Runtime.load0(Runtime.java:806)java.lang.System.load(System.java:1086)com.hadoop.DriverServlet.doPost(DriverServlet.java:25)javax.servlet.httpHttpServlet.service(HttpServlet.java:650)javax.servlet.httpHttpServlet.service(HttpServlet.java:731)org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

我也搜索了这个问题,但仍然找不到任何解决方案。甚至我也试过这个http://examples.javacodegeeks.com/java-basics/java-library-path-what-is-it-and-how-to-use/添加到java.library的路径指向eclipse中的opencv-249jar,但仍未解析。

有人能帮我吗?提前谢谢。

要使用opencv,需要jar文件和二进制文件。JAR文件可以简单地由本地maven存储库或任何其他变体添加。

需要手动添加和加载的二进制文件。类似这样的东西:

private static void addLibraryPath(String pathToAdd) throws Exception{
    final Field usrPathsField = ClassLoader.class.getDeclaredField("usr_paths");
    usrPathsField.setAccessible(true);
    //get array of paths
    final String[] paths = (String[])usrPathsField.get(null);
    //check if the path to add is already present
    for(String path : paths) {
        if(path.equals(pathToAdd)) {
            return;
        }
    }
    //add the new path
    final String[] newPaths = Arrays.copyOf(paths, paths.length + 1);
    newPaths[newPaths.length-1] = pathToAdd;
    usrPathsField.set(null, newPaths);
}
public void init() {
        String pathToOpenCvDll = "c:\opencv\"; //linux path works too
        try {
            addLibraryPath(pathToOpenCvDll);
            System.loadLibrary("opencv_java320");
        } catch (Exception ignored) {
        }
    }
}

对于web项目,lib jar文件应该在web-INF/lib目录中。

还要确保目录中的jar在类路径中

最新更新