• 作者:老汪软件技巧
  • 发表时间:2024-09-18 15:02
  • 浏览量:

OpenCV 的 JNI(Java Native Interface)是用来使 Java 应用程序能够调用 OpenCV 的 C++ 库函数的接口。JNI 是 Java 提供的一种机制,它允许 Java 代码与本地(通常是 C/C++)代码进行交互,因此可以在 Java 应用中使用性能更高的本地代码。

在 OpenCV 中,通过 JNI 可以将 OpenCV 的核心功能暴露给 Java 程序,使得 Java 开发者能够利用 OpenCV 的图像处理和计算机视觉功能。这通常涉及到创建一个 JNI 层,Java 代码调用 JNI 层的函数,而这些函数再调用底层的 OpenCV C++ 函数。

典型的流程如下:

Java 代码调用本地方法(native method)。JNI 层将这些调用转发到相应的 C/C++ 实现中。C/C++ 实现执行所需的操作(如调用 OpenCV 的函数)。结果通过 JNI 层返回给 Java 代码。

在 OpenCV 中,为了在 Java 中使用 JNI,你需要:

这样,你就可以在 Java 项目中利用 OpenCV 的强大功能,同时保持 Java 的跨平台优势。

1 查询编译依赖

brew info opencv 

确保所有需要的模块都已安装,未安装的使用homebrew进行安装

2 下载 OpenCV 源码和拓展库

3 编译安装

进入源码文件夹,创建并进入 build 文件夹

cd opencv-4.8.0
mkdir build $$ cd build

建立一个run.sh文件,并输入如下代码,其中BUILD_opencv_java设置为ON OPENCV_EXTRA_MODULES_PATH设置为下载的opencv_contrib的modules路径

同时修改jdk的路径

# run.sh 脚本文件内容
cmake \
-DCMAKE_SYSTEM_PROCESSOR=arm64 \
-DCMAKE_OSX_ARCHITECTURES=arm64 \
-DWITH_OPENJPEG=OFF \
-DWITH_IPP=OFF \
-DCMAKE_BUILD_TYPE=RELEASE \
-DCMAKE_INSTALL_PREFIX=/usr/local/opencv \
-DJAVA_INCLUDE_PATH=/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home/include \
-DJAVA_AWT_INCLUDE_PATH=/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home/include \
-DJAVA_INCLUDE_PATH2=/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home/include/darwin \
-DBUILD_opencv_python2=OFF \
-DBUILD_opencv_java=ON \
-DINSTALL_PYTHON_EXAMPLES=OFF \
-DINSTALL_C_EXAMPLES=OFF \
-DBUILD_ZLIB=OFF \
-DOPENCV_ENABLE_NONFREE=ON \
-DOPENCV_EXTRA_MODULES_PATH=/Users/tankenqi/Downloads/opencv_contrib-4.8.0/modules \
-DBUILD_EXAMPLES=ON ..

输入 bash run.sh运行该命令,启动 cmake

编译安装opencv__编译安装OpenCV4.7

bash ./run.sh

完成之后输入make -j8或者make实现make

J之后的数字 8 表示我们将使用所有 8 个内核来运行Make命令

make -j8

最后后输入sudo make install进行安装

sudo make install

完成之后会在两个地方出现jar文件和lib文件,一个是build路径

opencv-4.8.0/build/bin/opencv-480.jar
opencv-4.8.0/build/lib/libopencv_java480.dylib

一个是安装路径

/usr/local/opencv/share/java/opencv4/libopencv_java480.dylib
/usr/local/opencv/share/java/opencv4/opencv-480.jar 

4 测试验证

完成后,利用IDEA创建如下示例代码

import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.core.Scalar;
public class Main {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        Mat mat = Mat.eye( 3, 3, CvType.CV_8UC1 );
        System.out.println( "mat = " + mat.dump() );
    }
}

同时设置 java library path

-Djava.library.path=/usr/local/opencv/share/java/opencv4

添加 jar 包依赖

启动运行输出如下


上一条查看详情 +使用Vultr科学上网
下一条 查看详情 +没有了