如何将Mat (opencv) 转换为INDArray(DL4J)?

5

我希望有人能够帮助我解决这个任务。我正在处理一些图像分类问题,尝试结合OpenCv 3.2.0 和 DL4J。我知道DL4J也包含了Opencv,但我认为它是无用的。

有谁能告诉我如何转换成INDArray?我尝试阅读一些问题在这里,DL4J中的NativeImageLoader类提供了asMatrix(Mat image)方法。但是当我尝试运行它时,我得到了一个错误。

java: no suitable method found for asMatrix(org.opencv.core.Mat)

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

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

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

感谢您的关注。
2个回答

2
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位结构)
您可以将本地库复制到java home中,并在您的代码中执行以下操作:
 System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
 Mat imgMat = Imgcodecs.imread("C:\\Pictures\\image.jpg");
 INDArray image = loader.asMatrix(imgMat);

你可以使用以下方法,这是最佳的方案。
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项目中采用相同的方法。


0
你可以尝试使用 org.datavec.image.loader.NativeImageLoader

public INDArray asMatrix(Mat image) 抛出 IOException


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接