0
点赞
收藏
分享

微信扫一扫

java在linux下编译使用opencv

Yaphets_巍 2022-04-03 阅读 44
javaopencv

说多了都是泪。

此次编译环境。centos7,openjdk1.8,opencv4.5.3

1,环境准备

yum install epel-release git gcc gcc-c++ cmake3 qt5-qtbase-devel python python-devel python-pip cmake python-devel numpy python34-numpy gtk2-devel libpng-devel jasper-devel openexr-devel libwebp-devel libjpeg-turbo-devel libtiff-devel libdc1394-devel tbb-devel eigen3-devel gstreamer-plugins-base-devel freeglut-devel mesa-libGL mesa-libGL-devel boost boost-thread boost-devel libv4l-devel -y

装依赖包,好像不需要知道为什么装。装就是了。

装python环境(OpenCV安装得时候会检测你装了什么开发环境就生成哪些接口,装了Python3就会打包Python3的接口)

yum install -y python36 python36-devel python36-pip python36-numpy

这里要提为什么要装ant,因为调jni的SDK的jar包是通过ant编译的。。。。。

yum -y install ant

一定要配置JAVA_HOME,一定要配置JAVA_HOME,一定要配置JAVA_HOME(因为配置了才会去生成了java的SDK也及时jar包)

装JDK,但是还是建议自己用压缩包+配置JAVA_HOME的方式装。这种最保险。(为什么?因为Linux一堆软链接实在搞不懂,会在ant编译的时候报错找不到javac,这里搞了1个多小时才发现。还是解压安装java靠谱。。。。。)

yum install -y java-1.8.0-openjdk-devel

-----基本齐活了。

 

以下是网上说得很重要,但并无卵用的东西。你要用视频特性除外。比如以下没成功也没啥,openCV是会根据你的环境动态调整的。

yum -y install ffmpeg ffmpeg-devel  (可以不装)

2、下载源码文件

这个官方git去下吧,网速够快下没问题。

opencv-4.5.3.zip

opencv_contrib-4.x.zip(以前好奇为啥有这个,后来知道扩展模块都在里面,相当于openCV只是框架,这里面是开箱即用的东西,粗浅理解)

3、开始编译

3.1----解压两个压缩包,如下(XX是自己的用户目录名)

/home/XX/opencv-4.5.3

/home/XX/opencv_contrib-4.x  

3.1----在opencv-4.5.3建个build,主要是生成一堆编译文件好区分。如果出错直接删除build重来。

3.2----cmake,在build目录下执行如下命令(自己注意换行什么的。)

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_GENERATE_PKGCONFIG=ON -D OPENCV_EXTRA_MODULES_PATH=/home/opencv_contrib-4.x/modules -D ENABLE_CXX11=ON -D WITH_1394=OFF -D BUILD_opencv_xfeatures2d=OFF -D BUILD_SHARED_LIBS=OFF -D BUILD_TESTS=OFF ..

重要参数说明

-D CMAKE_BUILD_TYPE=RELEASE  编译发布版本

-D CMAKE_INSTALL_PREFIX=/usr/local  编译后的安装主目录

-D OPENCV_GENERATE_PKGCONFIG=ON 这个是为了C++引用的,可以忽略

-D OPENCV_EXTRA_MODULES_PATH=/home/XX/opencv_contrib-4.x/modules 这个就是附加模块路径

-D ENABLE_CXX11=ON C++版本支持

-D WITH_1394=OFF  这个好像要加些依赖,关掉。不关也没关系

-D BUILD_opencv_xfeatures2d=OFF 这里要重点说一下,在附件模块opencv_contrib-4.x/modules里面有很多目录,如果有些你不想要就关掉。比如xfeatures2d这个就导致我编译不过,我又不用,直接关掉。

-D BUILD_SHARED_LIBS=OFF 这个重点说,就是让依赖库变成一个SO而不是很多SO。这个SO就是java的jni要用的。

-D BUILD_TESTS=OFF 关掉测试,提高编译效率,减少时间。编译太长时间了。。。。。

.. 后面两个点是编译上级目录的

这里cmake版本过低不能编译,需要重新安装。如果有cmake3,也可以直接将cmake换成cmake3.

命令执行后会生成make文件等,这里的输出一定一定一定要关注,以前就是吃亏。

这里我们要排除的都排除了。 

视频处理这些这里不用所以也没什么。

 

 这里是安装了python,所有会编译python的SDK。但这里后面会有个坑,就是这里编译需要很大的内存,没内存的话会卡在99%或100%。。。哎。内存小了还是不要装python3了吧

以上是装了ant和配置了JAVA_HOME才有的。

--------------------------------有网友有其他更好的方案,动态的填充一些路径很什么的------------

make .. -D CMAKE_BUILD_TYPE=Release -D CMAKE_VERBOSE_MAKEFILE=ON -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=/home/opencv_contrib-4.x/modules -D BUILD_opencv_python3=ON -D WITH_1394=OFF -D ENABLE_CXX11=ON -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D OPENCV_GENERATE_PKGCONFIG=ON -D BUILD_opencv_xfeatures2d=OFF -D BUILD_SHARED_LIBS=OFF -D PYTHON3_LIBRARY=$(python3 -c "from distutils.sysconfig import get_config_var;from os.path import dirname,join ; print(join(dirname(get_config_var('LIBPC')),get_config_var('LDLIBRARY')))")  -D PYTHON3_NUMPY_INCLUDE_DIRS=$(python3 -c "import numpy; print(numpy.get_include())") -D PYTHON3_PACKAGES_PATH=$(python3 -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")

红色部分自己看把,就是返回些路径什么的。

3.3开始漫长的编译

如果你是单核编译,有可能能几个小时哦。。。。。

多核的话用 make -j8  其中8是几核的意思

如果你不知道几核,直接用下面的命令吧。就是去系统李查几核。

make all -j$(grep -c ^processor /proc/cpuinfo)

3.4成功后执行make install

4、拿我们要用的so和jar

 还记得前面配置的/usr/local吧。引用的jar和so这在这里吧。加载和使用另找文章看吧。

感谢以下同学的详细资料,感谢!

参考

https://zhuanlan.zhihu.com/p/392751819

https://www.cnblogs.com/lvzhenjiang/p/14198866.html

https://blog.csdn.net/chenxiao_ji/article/details/52880766

https://zhuanlan.zhihu.com/p/260364538
https://github.com/vishwesh5/OpenCV-Docker

https://www.cnblogs.com/huizhipeng/p/12732019.html

https://juejin.cn/post/6870109208730140686

https://github.com/spmallick/learnopencv/blob/master/CI/Dockerfile

https://blog.csdn.net/boom_man/article/details/87628287
https://github.com/spmallick/learnopencv/tree/master/DNN-OpenCV-Classification-with-Java

 

举报

相关推荐

0 条评论