本文想编译第三方模块,特别是aruco模块和sfm(structure from motion)模块,因此,contrib代码需要同时编译。
由于sfm模块依赖于其他库,如果这些仓库不提前安装最后,sfm不会编译。
以下一些需要安装c;据说sfm文档也需要遵循ceres库但似乎不安装也没关系。
sudo apt。-。get install libeigen3。-。dev libgflags。-。dev libgoogle。-。glog。-。dev。
首先下载OpenCV的源代码,本文使用的基本源码版本为4.10.0, 扩展源码contrib源码版本4.10.0。注意版本要一致。
Linux环境最好下载[科学上网工具],在编译代码时,会下载一些东西,如果下载失败,编译可能不成功。
我更喜欢使用cmake-gui工具,比较直观。首先选择OpenCV 4.10.0文件夹作为源码文件夹,然后新建build文件,作为生成文件夹。第一次点击configure。
然后在变量配置中,OPENCV_EXTRA_MODULES_PATH,OpenCV_Contrib_4.10.0modules(注意modules文件夹)选择。
为了快速编译可以对。
BUILD_TESTS。
BUILD_PERF_TESTS 取消勾选。
BUILD_opencv_python_tests。
勾选。
OPENCV_ENABLE_NONFREE 编译生成不免费的库(比如之前的SIFT,现在已经过了产权期)
选择。
CMAKE_INSTALL_PREFIX选择要安装的路径,建议不要安装系统文件夹,这样可以共存多个OpenCV版本。
再次点击configure。
单击generaterate.。
在新建的build文件夹中使用。
make -j8 (-j后面有一个数字,表示要编译多少个线程。通过命令nproc查询系统有多少线程)
编译成功后。
make install (如果是系统路径,需要sudo make install)。
再次在Linux中我用cmake配置opencv,因为我在个人路径下安装了OpenCV,cmake肯定找不到因此,OpenCV需要配置OpenCV_DIR。
-DOpenCV_DIR=opencv安装路径/lib/cmake/opencv4”。
opencv安装路径是CMAKE_INSTALL_PREFIX指定。
然后。
在CMakelists中.OpenCV首先要在txt中找到。
写作:
find_package(OpenCV CONFIG REQUIRED PATHS ${ OpenCV_DIR}) (一般不需要 写下后面的PATHS ${ OpenCV_DIR}, 我这样写是为了防止系统中还有其他OpenCV版本)
然后链接(include路径不需要设置c;例如,OpenCV_INCLUDE_DIRS添加到头文件路径)
target_link_libraries(target_name PRIVATE fmt::fmt ${ OpenCV_LIBS})。