这几天做一个功能大疆无人机拍摄的正射图片要做粗几何校正,参考了python版本的,需要用到opencv与gdal
一、opencv的使用(使用的是.so,没有安装opencv)
看网上下载.so 都需要积分,果断从官网下载opencv4.7.0版本源码,自己创建了个ubuntu18.0.4虚拟机,自己编译获取.so 文件。
如何编译opencv就不说了,说一下碰到的问题:
1、没有编译成功 libopencv_java470.so 没找到,网上一搜依赖环境没有安装好
java与ant 没有安装
安装一个与线上环境相同的JDK版本,我这里使用的是jdk-8u401-linux-x64.tar.gz
tar -zxvf jdk-8u401-linux-x64.tar.gz
echo 'export JAVA_HOME=/usr/local/jdk1.8.0_401' | sudo tee -a /etc/profile
echo 'export PATH=$PATH:$JAVA_HOME/bin' | sudo tee -a /etc/profile
source /etc/profile
安装ant
sudo apt-get install ant -y
执行cmake 时 Java相关的环境如下才算正常
第二次编译的.so 文件 不能用,只有2M多一点,没有包含其他关联的库;
网上搜索了一下需要 cmake 的时候需要加上 -D BUILD_SHARED_LIBS=OFF
我的cmake命令是这样的:
cmake -D CMAKE_BUILD_TYPE=Release -D BUILD_opencv_java=ON -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_SHARED_LIBS=OFF ..
然后:
make -j10
make install
时间较长生成了一个60多M的so文件。
需要的话可以下载链接:https://pan.baidu.com/s/1fMt9CzB_3Y7u8ZF2hlz0Vw 提取码:42ty
然后copy 到自己项目指定的路径下加载就好了 :
System.load(opencvPath)
引入 jar 包即可调用opencv了
2、java 调用的时候报错 :
/usr/share/opencv/libopencv java470.so: libavcodec.so.58:sharedsuch file or directory
查了一下系统中只有libavcodec.so.57 没有libavcodec.so.58 啊,差了一顿 最终发现这个文件来自于执行的依赖 libavcodec-dev
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff5.dev libswscale-dev
发现这个依赖时FFMPEG的库 ,因为之前我用的时ubuntu22.04版本的系统下编译opencv的 ,下载libavcodec-dev的时候按照当前系统版本下载了最新的,所以java加载libopencv java470.so时 找到是 libavcodec.so.58这个关联库。换成ubuntu18.04之后就正常了,可以通过cmke查看其版本
所以建议开发还是编译都要跟线上环境一致。免得碰到版本问题,浪费时间。