TANKENQI.cn

August 30, 2024

Mac 编译安装 OpenCV

GNU Make2.7 min to read

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++ 函数。

典型的流程如下:

  1. Java 代码调用本地方法(native method)。
  2. JNI 层将这些调用转发到相应的 C/C++ 实现中。
  3. C/C++ 实现执行所需的操作(如调用 OpenCV 的函数)。
  4. 结果通过 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 

image-20240830112131281

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

2 下载 OpenCV 源码和拓展库

image-20240830114616729

3 编译安装

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

cd opencv-4.8.0mkdir build $$ cd build

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

同时修改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

image-20240830115442178

添加 jar 包依赖

img

启动运行输出如下

image-20240830120331943