>  기사  >  운영 및 유지보수  >  Java는 LINUX에서 OpenCV so 라이브러리를 어떻게 로드합니까?

Java는 LINUX에서 OpenCV so 라이브러리를 어떻게 로드합니까?

PHPz
PHPz앞으로
2023-05-26 17:18:461823검색

 이 예는 작동하지 않을 수 있습니다. 그 이유는 종속 라이브러리 로딩 문제 때문입니다. 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 라이브러리를 어떻게 로드합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제