Mac安装OpenCV 3.x for Java

打算玩玩OpenCV,于是按照官方的Tutorial开始安装OpenCV for Java,结果被坑得熬了个通宵才搞好…网上关于Mac安装OpenCV 3.x for Java资料几乎没有,故记录下来。

环境

1
2
3
OS: macOS 10.13
OpenCV: 3.3.1
IDE: IntelliJ IDEA 2017.2

安装步骤

1.安装XCode Command Line Tools

执行xcode-select --install就行了,如果弹出窗口就点击安装,否则会提示说已安装。

2.修改OpenCV编译参数

因为安装OpenCV默认是不带Java环境的,因此需修改编译参数。

执行brew edit opencv,在打开的文件中把-DBUILD_opencv_java=OFF改为-DBUILD_opencv_java=ON

3.从源码编译安装OpenCV 3.3.1

执行brew install --build-from-source opencv会开始编译OpenCV,当前默认版本为OpenCV 3.3.1。

到此一切都很顺利,然而接下来却碰到了第一个问题…

4.问题:没有生成jar包

安装完成后,在/usr/local/Cellar/opencv/3.x.x/share/OpenCV/java/目录下应该会有opencv-331.jar这个文件。但我在安装完后发现/usr/local/Cellar/opencv/3.x.x/share/OpenCV下根本就没有java这个文件夹!反复修改了几次安装参数,反复编译了几次,均无法解决。查阅了不少资料也都没有有效的方法。

我几乎要崩溃了,反复google之后在stackoverflow的某个问题下有人回答必须先执行brew install ant。未生成jar跟ant应该有很大的关联,但我的环境里已经安装了ant,不过不是使用brew安装的。于是抱着最后一丝希望,使用brew再次安装了ant之后重新编译。漫长的等待之后终于生成了java目录!原因竟然是必须使用brew安装的ant

问题终于解决,于是开始撸opencv的Java代码,但第二个问题随之而来。

5.问题: java.lang.UnsatisfiedLinkError: no opencv_java331 in java.library.path

构建工具使用的是gradle,在build.gradle下添加了opencv-331.jar

1
2
3
4

dependencies {
compile files('/usr/local/Cellar/opencv/3.3.1_1/share/OpenCV/java/opencv-331.jar')
}

但在运行程序的时候还是抛出了异常:

1
java.lang.UnsatisfiedLinkError: no opencv_java331 in java.library.path

原因是没有引入OpenCV的JNI库,在IDEA中添加以下JVM启动参数可解决。

1
-Djava.library.path="/usr/local/Cellar/opencv/3.3.1_1/share/OpenCV/java"

本以为问题就此解决,但运行后还是抛出了新的异常。

6.问题:opencv Library not loaded: /usr/local/opt/jpeg/lib/libjpeg.8.dylib

连续踩了这么多坑,加上当时已是深夜,头脑有些不清醒了,以为这个问题还是库的问题,于是把opencv下所有的库都引入了,结果还是不能解决。

反复搜索后发现本地的/usr/local/opt/jpeg/lib/目录下只有libjpeg.9.dylib,谜题总算解开–本地libjpeg库的版本不同

跑了下Java代码,成功调用了opencv的人脸检测,opencv总算安装成功。

总结

OpenCV是使用C/C++写的,受本地环境的影响比较大,安装过程应该认真分析异常,保持冷静…