(Window、mac)配置opencv + idea

最近在做一个项目时要用到opencv来做图像处理,所以需要配置开发环境,崩溃开始~~~刚开始在mac配置最终放弃,改到windows配置后在一通折腾后终于成功,下边一步一步教大家怎么配置。

一、配置基础环境

  1. 安装jdk,我这里安装的是jdk18
  2. 安装idea,我用的是2022.2.1
  3. 安装maven

以上都是基础环境配置我就不赘述了,大家自行安装即可。

二、windows 安装opencv

1、访问opencv官网

https://opencv.org/releases/page/2/

2、找到 OpenCV – 4.3.0 (注意:一定要注意安装版本,代码和下载的一定要同一个版本)

 

3、点击 windows 下载 opencv-4.5.1-vc14_vc15.exe ,由于是国外网站最好FQ后再下载会快一下

https://altushost-swe.dl.sourceforge.net/project/opencvlibrary/4.5.1/opencv-4.5.1-vc14_vc15.exe

4、下载完成后,双击安装,就是7zip做的一个exe,记住安装位置,后边需要。

 5、这里就是解压后的 opencv 库,分别是 jar 包 和 dll 文件。

三、windows 创建java项目

1、java项目

1、点击 file -> New -> Project 

 2、输入项目名称,选择 IntelliJ 后单击 Create

 3、创建项目后选择 File -> Project Structure

 

 4、单击 Libraries -> + -> Java

 5、选择刚才安装的opencv jar包,这就是刚才让大家记住的目录,如果忘记了再装一次 opencv 就找到了。

 

 6、此时 opencv 的 jar 库就配置好了。这里就是我之前犯错误的地方,之前这时候我就去写代码了运行后一直报错,jndi找不到库,如何解决呢?见7步

 7、点击 + 选择opencv dll库

8、选择 opencv 的 dll 后点击 ok

 

 9、此时 opencv 就配置好了,一个是 open cv 的 jar 包,一个是 open cv 的 dll 库

10、点击 ok ,关闭 Project Structure ,开始写代码

11、src 点击右键 new - java class 创建一个新类,名字随便起

 

 12、代码如下

import org.opencv.core.Core;
import org.opencv.core.Mat;

import static org.opencv.core.Core.NATIVE_LIBRARY_NAME;
import static org.opencv.highgui.HighGui.*;
import static org.opencv.imgcodecs.Imgcodecs.imread;
import static org.opencv.imgcodecs.Imgcodecs.imwrite;

public class opencv1 {

    public static void main(String[] args) {
        System.out.println("Welcome to OpenCV " + Core.VERSION);
        System.loadLibrary(NATIVE_LIBRARY_NAME);

        //读取图片
        Mat imread = imread("C:\\Users\\jubo\\Pictures\\baijiayun.PNG");
        //显示窗口
        imshow("demo",imread);
        //按任意键退出程序
        waitKey(0);
        //关闭所有窗口
        destroyAllWindows();
        //保存图片
        imwrite("./out/test1.png",imread);
    }
}

 注意一定要加  System.loadLibrary(NATIVE_LIBRARY_NAME); 否则依然会报错 

 13、运行代码后可以看到图片已经加载,并且在 out 目录中也有保存的文件。到此 opencv 集成完成

 

2、maven项目

这次换成了 4.5.1 版本的 opencv 库

1、创建一个 maven 项目

 

 2、在 pom.xml 中加入 opencv 依赖

    <dependencies>
        <dependency>
            <groupId>org.bytedeco</groupId>
            <artifactId>opencv</artifactId>
            <version>4.5.1-1.5.5</version>
        </dependency>
    </dependencies>

 3、pom.xml 上单击右键,选择 Reload Project 导入库

 4、导入完成后,还是选择 dll 库

 5、写完代码后运行,跟java项目一样运行效果

二、mac安装opencv

 经过一通乱搞,终于可以在 mac 上安装 opencv 了。为什么我在 mac 安装 opencv 这么费劲,主要原因是我需要在 java 中使用 opencv。而默认安装中不带 java 的 dylib,如果你在 python 或 c 中使用 opencv 那就幸福了,默认安装即可。

1、默认安装(java的请绕道) 

如无意外,按照如下步骤就可以成功安装 opencv了。

# 升级 brew
brew update
# 安装 cmake
brew install cmake
# 安装 ant
brew install ant
# 安装 opencv
brew install opencv

2、编译安装(通过编译生成 Java 适用的 dylib)

1、如果按照默认安装过 opencv,需要先卸载后才能重新编译安装 opencv。执行如下命令卸载 opencv

# 删除已安装的 opencv
brew uninstall opencv 

 2、安装基础库,按照如下命令安装即可

# 升级 brew
brew update
# 安装 cmake
brew install cmake
# 安装 ant
brew install ant

3、设置 环境变量

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_331.jdk/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH
#################opencv dylib##############
export JAVA_AWT_INCLUDE_PATH=$JAVA_HOME
export JAVA_AWT_LIBRARY=$JAVA_HOME
export JAVA_INCLUDE_PATH=$JAVA_HOME/indclude
export JAVA_INCLUDE_PATH2=$JAVA_HOME/include/darwin
export JAVA_JVM_LIBRARY=$JAVA_HOME
###############################

4、打开 opencv java 编译选项

brew edit opencv

找到-DBUILD_opencv_java=OFF 修改为-DBUILD_opencv_java=ON 如下图。查找和保存退出就是 vi 命令。

 

5、执行以下命令编译 opencv ,时间有点长耐心等待下。

brew install --build-from-source opencv

 编译成功如下图

 

 

成功后在 /opt/homebrew/Cellar/opencv/4.6.0/share/java/opencv4 这里会生成 libopencv_java460.dylib 和 opencv-460.jar

 

 

 此时就可以开始在 idea 里玩 opencv了,idea 中的用法跟 windows 平台上一样。

3、老版本源码编译安装

 由于我的项目使用的是 4.3.0 版本的 opencv 但默认编译出来的是 4.6.0 版本所以需要下载 4.3.0 版本的源码重新编译。(注意:我在 m1 芯片的 mac 本上并没有编译成功,后续用了一个“混”的方法解决了,这里只是把编译方法记录一下后续再解决
1、下载老版本源码,在官网找到 4.3.0
https://opencv.org/releases/page/2/

 

2、下载后解压缩到一个目录中,我放到了 opencv/opencv-4.3.0 目录中

3、进入目录后同样需要安装基础库 

# 升级 brew
brew update
# 安装 cmake
brew install cmake
# 安装 ant
brew install ant

4、安装其他依赖库

brew install gcc git cmake pkg-config ffmpeg libgphoto2 libav libjpeg libpng libtiff libdc1394 ant

有文档说还要安装 ffmpet 4,也不管了先装上再说

brew install ffmpeg@4

5、同样需要设置环境变量,设置的时候 JAVA_HOME 需要根据你的配置修改

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_331.jdk/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH
#################opencv dylib##############
export JAVA_AWT_INCLUDE_PATH=$JAVA_HOME
export JAVA_AWT_LIBRARY=$JAVA_HOME
export JAVA_INCLUDE_PATH=$JAVA_HOME/indclude
export JAVA_INCLUDE_PATH2=$JAVA_HOME/include/darwin
export JAVA_JVM_LIBRARY=$JAVA_HOME
###############################

6、cmake编译

# 在 opencv-4.3.0 目录中创建 build 目录
mkdir build
# 进入 build 目录
cd build
# cmake 编译,注意{你的路径}这里要写你的目录名
cmake -DBUILD_SHARED_LIBS=OFF -DWITH_IPP=OFF -DCMAKE_INSTALL_PREFIX={你的路径}/opencv-4.3.0 ../

cmake编译成功后如下图,注意看是否有 java 如果没有需要配置 -DBUILD_opencv_java=ON 见上

 

 

7、make编译,启动8线程编译

 

 

make -j 8

编译后显示如下错误。

 

 

 使用命令查询后也能看到只生成了jar没有dylib

 find . -name '*.dylib'
 find . -name '*.jar'

4、“混”方法解决了 maven 项目使用 opencv 4.3.0

1、创建一个 maven 项目
2、在 pom.xml 中加入 opencv 4.3.0
    <dependencies>
        <dependency>
            <groupId>org.bytedeco</groupId>
            <artifactId>opencv</artifactId>
            <version>4.3.0-1.5.3</version>
        </dependency>
    </dependencies>

 加好后如下图

 

 3、创建class并写好代码,代码如下

import org.opencv.core.Core;
import org.opencv.core.Mat;

import static org.opencv.core.Core.NATIVE_LIBRARY_NAME;
import static org.opencv.highgui.HighGui.*;
import static org.opencv.imgcodecs.Imgcodecs.imread;
import static org.opencv.imgcodecs.Imgcodecs.imwrite;

public class aa {
    public static void main(String[] args) {

        System.out.println("Welcome to OpenCV " + Core.VERSION);
        System.loadLibrary(NATIVE_LIBRARY_NAME);

        //读取图片
        Mat imread = imread("/Users/lairongsheng/Downloads/1.png");
        //显示窗口
        imshow("demo", imread);
        //按任意键退出程序
        waitKey(0);
        //关闭所有窗口
        destroyAllWindows();
        //保存图片
        imwrite("./out/test1.png", imread);
    }
}

4、找到之前编译好的 460 的 dylib 复制一个然后改成 430,复制后如下图红框

 

 5、在 Project Structure 中配置 Native Library,按上图选路径

 

 6、运行后看到已经成功了,不过这个方法有点“混”不知道有啥后遗症......

 

 

  

 

  

  

 

posted @ 2022-08-21 14:05  rslai  阅读(1955)  评论(0编辑  收藏  举报