由于OpenCV 本身是通过C++开发的。如果要用JAVA进行开发,则需要通过JNI调用C++的库才可以实现。但是OpenCV官方只提供了windows环境下的dll库,没有提供mac OS 和Linux下面的库。所以,如果想在Mac os 和linux下面进行开发,关键的一点就是需要编译出本地的openCV库。

目前网上有两种方式来做这个事情,我尝试了一下。 其中号称利用port 自动安装编译的方式,没有走通,不知道是在那个环节出了错,而且似乎目前只支持3.X版本的openCV 所以尝试了一下失败之后,就没有再试了。转而使用官网提供的方法。 官网的编译方法连接如下:

https://docs.opencv.org/4.1.1/d9/d52/tutorial_java_dev_intro.html

具体的步骤,不在赘述,只是写一下遇到的几个问题,以供参考。

首先,如官方文档所说,要成功编译,必须要安装 Ant Python  JAVA cmake 这是必备的四个东西,缺少任何一个都会出问题。

其次,cmake -DBUILD_SHARED_LIBS=OFF .. 之后 一定要能在日志中找到 to be built: 后面的组件列表中一定要有java 否则就需要仔细检查环境。 由于make -j8操作很耗时,所以没有确定环境具备之前,不要继续做。以免浪费时间

第三,cmake的时候需要用到一个ippicv_2019_mac_intel64_20180723_general.tgz  这个文件下载非常缓慢,通常会因为超时导致cmake失败,所以解决办法是,提前下载到本地,放到磁盘上,下载路径是

https://raw.githubusercontent.com/opencv/opencv_3rdparty/32e315a5b106a7b89dbed51c28f8120a48b368b4/ippicv/ippicv_2019_mac_intel64_general_20180723.tgz

下载完之后,修改 <opencv>/3rdparty/ippicv/ippicv.make文件,找到ocv_download(FILENAME ${OPENCV_ICV_NAME} 这一行,在这一行的下面会写着 下载文件的路径,手工修改路径,将它改成本地文件所在的位置, 

mac java 命令行版本修改 mac os java_java

修改后的结果如上图所示. 这样可以节省编译是下载的时间,避免下载超时导致失败.

第四,编译的时候可能会遇到Could NOT find JNI 的错误提示,如果确定你的JAVA_HOME的环境变量没有配错的话,那么就在显示的配置一下JAVA_AWT_INCLUDE_PATH=$JAVA_HOME/include  这个环境变量就可以了(PS:每次重新执行cmake的时候最好删除一下build目录里面的所有文件,有时候会出现新增加的环境变量不生效的问题)

目前遇到的问题就是这些,基本上解决之后就能顺利编译了.

对了,另外补充一下, 以目前的情况来说,java最好使用 JDK8  不要使用11.  在用port安装的时候发生过部分组件认为java11的版本低于java 1.3的问题, 而不进行编译. 看来目前对JAVA11的全面支持还是有问题的, 这方面要注意一下.