全网首发:Java在LINUX上系统上加载OpenCV so库的范例代码

Posted 柳鲲鹏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了全网首发:Java在LINUX上系统上加载OpenCV so库的范例代码相关的知识,希望对你有一定的参考价值。

前面有一个博文:

OpenCV最简JAVA版范例_柳鲲鹏的博客-CSDN博客_java opencv示例

  这个范例不一定能跑起来。原因就是依赖库加载的问题。如果libopencv_java.so:

  • 包含其他所有的so功能,上述博文就是对的。
  • 如果不包含,需要一定的加载技巧。

  代码范例如下:

package taishan;
 
import java.io.File;
import java.util.LinkedList;
import java.util.List;

import org.opencv.core.CvType;
import org.opencv.core.Mat;
 
@SuppressWarnings("serial")
public class OpenCVTest

	public final static String LIB_PATH = "/home/wuxi/eclipse-workspace/OpenCVTest/libs/bin";
	
    private static List<File> getOpenCVFiles(final String dirName)
    
        if (dirName == null)
        
            return null;
        
        File dir = new File(dirName);
        if (!dir.exists() || !dir.isDirectory())
        
            return null;
        
        
        File[] files = dir.listFiles();
        List<File> fileList = new LinkedList<File>();
        for (File file : files)
        
            String name = file.getName();
            if (   name.startsWith("lib") && name.endsWith(".so"))
            
                fileList.add(file);
            
        
        return fileList;
    

    private static void loadNativeOpenCV(final String dirName)
    
        List<File> fileList = getOpenCVFiles(dirName);
        if (fileList == null || fileList.size() == 0)
        
            return;
        
        
        while (fileList.size() > 0)
        
            for (int i=0; i<fileList.size(); i++)
            
                File file = fileList.get(i);
                try
                
                    System.load(file.getAbsolutePath());
                
                catch (java.lang.Throwable e)
                
                    continue;
                
                
                fileList.remove(i);
                i--;
            
        
        
        //如果libopencv_java.so在另外目录,需要单独加载
        //System.load(Dir+"/"+"lib"+Core.Core.NATIVE_LIBRARY_NAME+"."+LIB_SUFFIX_LINUX);
    
    
	public static void main(String[] args)
	
		loadNativeOpenCV(LIB_PATH);
		
        Mat m  = Mat.eye(3, 3, CvType.CV_8UC1);  
        System.out.println("m = " + m.dump());  
    

  关键的一句就是要正确找到so包。

以上是关于全网首发:Java在LINUX上系统上加载OpenCV so库的范例代码的主要内容,如果未能解决你的问题,请参考以下文章

全网首发:由两个库同名函数,看LINUX动态库加载及调用

全网首发:解决uos上sqlite-jdbc访问/tmp目录出错提示的问题

全网首发:MAC上运行SHELL脚本,typeset -l报错

全网首发:制作LINUX安装软件包,要处理哪些系统目录和文件

全网首发:制作LINUX安装软件包,要处理哪些系统目录和文件

全网首发!java将内容写入文件