前期准备
MSYS2
下载地址
作用:MSYS2 is a collection of tools and libraries providing you with an easy-to-use environment for building
Everything
下载地址
作用:快速文件索引
git
下载地址
作用:下载源码库
环境搭建
安装MSYS2后打开terminal
执行
pacman -S mingw-w64-x86_64-gcc
pacman -S mingw-w64-x86_64-cmake
pacman -S mingw-w64-x86_64-ninja
安装mingw gcc/cmake/ninja
安装完成后,打开环境变量,将msys64\mingw64\bin
的路径加入到PATH。
下载源码
注册github账号
右键打开 git bash
下载 tabb-level-set-segmentation 源码
git clone https://github.com/amy-tabb/tabb-level-set-segmentation.git
下载eigen源码
git clone https://gitlab.com/libeigen/eigen.git
cd eigen
git checkout 3.4.0 #若需要其他版本可以通过 git tag 查看并checkout
下载opencv, opencv_contrib 源码
git clone git@github.com:opencv/opencv.git
git clone git@github.com:opencv/opencv_contrib.git
如果需要4.10.0
cd opencv
git checkout 4.10.0 # opencv_contrib 也是同样操作,核心就是opencv_contrib 和 opencv需要保持一致
编译依赖
Eigen 直接使用无需编译
编译 Opencv
将opencv_contrib/module内的所有内容拷贝到opencv/module中,当然可以用cmake的 OPENCV_EXTRA_MODULES_PATH 指定。使用command prompt 进入opencv的主目录,执行
cmake -S . CMAKE_BUILD_TYPE=Release -B build -D CMAKE_INSTALL_PREFIX=build/install -D BUILD_opencv_world=ON -G Ninja
构建快慢取决于CPU核数和性能,我6核要等半个多小时,configure成功后分别执行
cd build
ninja
ninja install
执行完毕完成后 opencv 及其 contrib 的 modules 均已编译安装完毕。
修改源码
找到 tabb-level-set-segmentation\level-set-segmentation\src\LevelSetWrite.cpp,将 system(command.c_str());
替换成 mkdir(iter_write_dir.c_str());
并加上#include"direct.h",否则无法在windows上创建目录。
编译 tabb-level-set-segmentation
进入到 tabb-level-set-segmentation\level-set-segmentation 目录,执行
g++ src/*.cpp -o level_set_seg -fopenmp -std=gnu++11 -Wall -I"C:\Users\kris\Documents\Code\eigen3" -I "C:\Users\kris\Documents\Code\opencv\build\install\include" -L"C:\Users\kris\Documents\Code\opencv\build\lib" -lgomp -lopencv_world4100
参数解析:
- “C:\Users\kris\Documents\Code\eigen3” 是下载好的eigen源码路径,需要替换成自己的路径
- “C:\Users\kris\Documents\Code\opencv\build\install\include” 为上一步构建好的opencv 头文件路径
- “C:\Users\kris\Documents\Code\opencv\build\lib” 为编译好的 opencv 库文件路径
- opencv_world4100 是编译opencv产生的库,4100即opencv的版本(4.10.0), 位置在C:\Users\kris\Documents\Code\opencv\build\lib(需要替换成你自己的路径),全称为 libopencv_world4100.dll.a.
然后生成 level_set_seg,此时在命令行执行 level_set_seg 会显示缺少dll文件,或者啥都不会显示,打开MSYS2 terminal 进入level_set_seg所在路径,执行
ldd level_set_seg
可以查看到底缺少什么dll文件,如下图
打开everything,搜索标记为not found的dll文件,并拷贝到 level_set_seg 所在文件夹。。。
执行/测试
根据 tabb-level-set-segmentation/README.md 来找测试用例并测试。