0
点赞
收藏
分享

微信扫一扫

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

大明宫 2022-10-02 阅读 34


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

举报

相关推荐

0 条评论