Mac M2安装OpenCV记录

61 阅读2分钟

OpenCV下载安装

Python下使用

建议直接通过 brew install opencv 安装最新版本 可以通过下面代码查看验证opencv版本,如果正常显示版本号就代表安装成功,可以正常使用了

    import cv2
    print(cv2.__version__)
    
    #/PycharmProjects/med-alay/cv.py 
    #4.12.0

Java下使用

源码下载

在官网 opencv.org/releases/ 下载最新4.12.0的source源码 下载好的源码放到 ~/opencv文件夹下,解压文件,进入源码目录创建build文件夹

    cd opencv-4.12.0
    mkdir build && cd build

安装opencv_contrib

在build目录下安装opencv_contrib

git clone https://github.com/opencv/opencv_contrib.git
cd opencv_contrib
git checkout 4.12.0

cmake安装

在build目录下执行下面命令安装
这里注意 JAVA_HOME 环境变量需要设置好 我本地用的是jdk21
CMAKE_INSTALL_PREFIX 编译结果输出文件目录
在自己的jdk目录确认 JAVA_INCLUDE_PATH JAVA_AWT_LIBRARY JAVA_JVM_LIBRARY目录下对应是否存在配置的文件
-D BUILD_opencv_java=ON 设置成ON,在后续java工程中调用需要最终编译的jar文件
-D OPENCV_EXTRA_MODULES_PATH 设置成opencv_contrib目录下的moudles文件目录
cmake \
-DCMAKE_SYSTEM_PROCESSOR=arm64 \
-DCMAKE_OSX_ARCHITECTURES=arm64 \
-DWITH_OPENJPEG=OFF \
-DWITH_IPP=OFF \
-D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local/opencv \
-D JAVA_INCLUDE_PATH=$JAVA_HOME/include \
-D JAVA_AWT_LIBRARY=$JAVA_HOME/lib/libawt.dylib \
-D JAVA_JVM_LIBRARY=$JAVA_HOME/lib/server/libjvm.dylib \
-D BUILD_opencv_python2=OFF \
-D BUILD_opencv_java=ON \
-D INSTALL_PYTHON_EXAMPLES=OFF \
-D INSTALL_C_EXAMPLES=OFF \
-D BUILD_ZLIB=OFF \
-D OPENCV_ENABLE_NONFREE=ON \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv/opencv-4.12.0/build/opencv_contrib/modules \
-D BUILD_EXAMPLES=ON ..

make

表示使用全部8个内核来运行make指令,可以按实际硬件情况调整,过程大概5~20分钟

make -j8

安装

sudo make install

Idea使用opencv配置

在上面编译安装成功后会在 /usr/local/opencv/share/java/opencv4 文件夹下找到 opencv-4120.jar 在Idea lib里下添加jar包或者将jar包上传的到本地私库直接通过maven引用 maven坐标

    <dependency>
        <groupId>org.opencv</groupId>
        <artifactId>opencv</artifactId>
        <version>4.12.0</version>
    </dependency>

在Main方法中验证

public static void main(String[] args) {
    System.load("/usr/local/opencv/share/java/opencv4/libopencv_java4120.dylib");
    Mat image = Imgcodecs.imread("~/images/test.png");
    System.out.println("width: " + image.width());
    System.out.println("height: " + image.height());
}

如果能正常输出宽高则正常安装调试成功