前言:前段时间接了个烂尾项目,要用到OpenCV,期间遇到了许多问题,摆弄了许久才得以解决,特地写成博客记录一下,以免再次遇到
SpringBoot中使用OpenCV并部署到Linux服务器
问题
项目在Windows底下运行时一切都好好的,但是,当我打成 jar 包放到 CentOS 服务器上运行时,问题出现了,如下:
Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:108)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:58)
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:65)
Caused by: java.lang.NullPointerException
at com.gcl.letao.LetaoApplication.main(LetaoApplication.java:22)
... 8 more
在CentOS安装OpenCV
我寻思着应该是服务器上没安装 OpenCV 导致的,所以我四处寻找教程,试错几次之后,终于找到一篇靠谱的, centos7下java使用opencv
- 按照编译依赖
yum -y install epel-release
yum install gcc gcc-c++
yum install cmake
yum install python-devel numpy
yum install ffmpeg-devel
yum install -y unzip zip
- 下载opencv 并解压
unzip opencv-4.6.0.zip
cd opencv-4.6.0
mkdir build
cd build
- 编译
cmake -D WITH_TBB=ON -D WITH_EIGEN=ON ..
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=<你想要安装的路径> ..
make
make install
- 编译opencv的java版本
yum install ant
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=<你前面设置的安装路径> -DBUILD_TESTS=OFF ..
make -j8
make install
注意:3、4两步的操作需要的时间可能比较长,请耐心等待…
环境配置
就当我以为安装好 OpenCV 就大功告成之后,没想到启动后它又报错了,错误如下:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no opencv_java460 in java.library.path
...
这貌似是运行环境还没弄好,缺少相关的类库,解决方法: Windows:Java异常之java.lang.UnsatisfiedLinkError: no opencv_java320 in java.library.path解决方案!
Linux:错误原因:java.lang.UnsatisfiedLinkError: no opencv_java430 in java.library.path
配置好环境之后,就可以直接直接加载 OpenCV 了,测试用例我就不给了,网上一搜一大把。
最后
PS:也可以到我的个人博客查看更多内容或联系博主 个人博客地址:小关同学的博客
|