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
设置为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
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
包依赖
启动运行输出如下