【问题标题】:How to convert Mat (opencv) to INDArray (DL4J)?如何将 Mat (opencv) 转换为 INDArray (DL4J)?
【发布时间】:2021-11-04 00:51:08
【问题描述】:

我希望任何人都可以帮助我解决此任务。我正在处理一些图像分类并尝试将 OpenCv 3.2.0 和 DL4J 结合起来。我知道 DL4J 也包含 Opencv,但我认为它没用。

谁能帮助我,如何转换成 INDArray ? 我试图阅读一些问题here,DL4J 的 NativeImageLoader 类提供了方法 asMatrix(Mat image)。 但是当我尝试运行它时出现错误

java: 没有找到适合 asMatrix(org.opencv.core.Mat) 的方法

我不知道如何修复我的代码,或者我的代码可能有问题。谁能帮我找出问题?

顺便说一句,这是我的代码:

Mat imgMat = Imgcodecs.imread("C:\\Pictures\\image.jpg");
INDArray image = loader.asMatrix(imgMat);

感谢您的关注。

【问题讨论】:

    标签: java opencv


    【解决方案1】:

    DL4J 不包括 OpenCV 本机库,因为该库必须位于 JAVA_HOME 目录或您可以访问的其他位置在您的代码中精确。如果你想使用DL4J自带的opencv功能,你必须先下载你使用的DL4J版本自带的opencv版本。 下载opencv库后,opencv原生库位于

    • opencv/build/java/x64/opencv_javaVERSION_OF_OPENCV.dll 适用于 64 位架构或
    • opencv/build/java/x86/opencv_javaVERSION_OF_OPENCV.dll 适用于 32 位架构。
    1. 您可以复制 java home 中的本机库并在您的代码中执行此操作:
     System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
     Mat imgMat = Imgcodecs.imread("C:\\Pictures\\image.jpg");
     INDArray image = loader.asMatrix(imgMat);
    
    1. 或者您可以使用这种最好的方法
    System.load("PATH/opencv_javaOPENCV_VERSION.dll");
    Mat imgMat = Imgcodecs.imread("C:\\Pictures\\image.jpg");
    INDArray image = loader.asMatrix(imgMat);
    

    PATH 是找到库的路径,OPENCV_VERSION 是您使用的 opencv 版本。

    你可以在其他基于opencv

    的java项目中采用同样的方法

    【讨论】:

      【解决方案2】:

      你可以试试org.datavec.image.loader.NativeImageLoader

      public INDArray asMatrix(Mat image) 抛出 IOException

      【讨论】:

        猜你喜欢
        • 2023-03-09
        • 2017-12-15
        • 1970-01-01
        • 1970-01-01
        • 2018-04-16
        • 2011-06-28
        • 2018-09-04
        • 2015-12-13
        相关资源
        最近更新 更多