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,你需要:
- 编译和安装 OpenCV,并确保启用了 Java 支持(通常是在 CMake 配置时设置
-D BUILD_opencv_java=ON)。- 在 Java 中加载 OpenCV 的 JNI 动态库(通常是
libopencv_java.so或者libopencv_java.dylib)。- 使用 OpenCV 提供的 Java 包装类(如
Mat,Core,Imgproc等)来调用 OpenCV 的功能。这样,你就可以在 Java 项目中利用 OpenCV 的强大功能,同时保持 Java 的跨平台优势。
1 查询编译依赖
brew info opencv 
确保所有需要的模块都已安装,未安装的使用
homebrew进行安装
2 下载 OpenCV 源码和拓展库

3 编译安装
进入源码文件夹,创建并进入 build 文件夹
cd opencv-4.8.0mkdir build $$ cd build建立一个
run.sh文件,并输入如下代码,其中BUILD_opencv_java设置为ONOPENCV_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
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.jaropencv-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包依赖

启动运行输出如下
