Java怎么在LINUX上加载OpenCV so库

  这个范例不一定能跑起来。原因就是依赖库加载的问题。如果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包。

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享