前言:前段时间接了个烂尾项目,要用到OpenCV,期间遇到了许多问题,摆弄了许久才得以解决,特地写成博客记录一下,以免再次遇到
项目在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
我寻思着应该是服务器上没安装 OpenCV 导致的,所以我四处寻找教程,试错几次之后,终于找到一篇靠谱的, centos7下java使用opencv
# 缺什么就下什么,其中cmake是最重要的
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
# 解压
unzip opencv-4.6.0.zip
# 进入解压后的目录
cd opencv-4.6.0
# 创建名为build目录存放后续生成的一些东西
mkdir build
# 进入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
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 了,测试用例我就不给了,网上一搜一大把。