NCORR DIC: c++ port for Windows using Microsoft Visual Studio C++ 2017.
1.前期准备
- 有 Visual Studio 2017
- 安装好 CMAKE
- 下载 Ncorr的C++接口源码
- 下载 OpenCV某个版本源码(这里以3.4.14为例)
- 下载 FFTW for Windows DLLs(以64-bit 为例)
- 下载 suitesparse-metis-for-windows
2.使用Cmake挨个编译
-
2.1 编译OpenCV
①打开cmake-gui界面:
-
Where is the source code
设置为opencv源码根目录
-
Where to build the binaries
设置为你想build后输出的目录
②点击Configure,设置为 Visual Studio 15 2017 (x64) ,然后点击Finish
③等待配置完成后,有一些选项变红让我们确认,直接不用改,再次点击Configure,等待完成后,点击Generate生成,会在你的build目标目录生成一个解决方案(.sln),打开这个sln
④设置为Release,生成菜单栏点击,批生成,选择 INSTALL
的Release和Debug,生成,等待生成结束,然后在build下找到install文件夹,这里就是OpenCV最终编译好的文件
2.2 编译fftw3
①将下载好的fftw3压缩文件解压,解压后如图,复制这个目录名。
②在开始菜单,找到visual studio 2017项,然后再找到VS2017 X64X86交叉工具命令提示符,右键以管理员权限运行。
③以fftw3在我电脑目录为例,首先进入e盘,其次进入“E:\Download\fftw-3.3.5-dll64”,即fftw3目录内,执行以下三条语句:
lib /def:libfftw3-3.def lib /def:libfftw3f-3.def lib /def:libfftw3l-3.def
④执行完成后退出,找到fftw3目录,编译完成后的目录内多出6个文件,如下
2.3 编译SuiteSparse
①运行 Cmake GUI
②Where is the source code
设置为suitesparse根目录,Where to build the binaries
设置为你想suitesparse编译后输出的目录
③点击Configure设置为
Visual Studio 15 2017(x64)
然后点Finish
④然后点击configure,弹出一些红色选项后再次单击configure
,直到显示Configuring done后点击 Generate
⑤Generating done完成后,打开\build\SuiteSparseProject.sln,点击批生成,勾选上ALLBUID的Release和Debug,INSTALL的Release和Debug后点击生成
⑥找到build\install文件夹,该文件夹就是suitsparse编译后的文件夹,然后把
E:\Download\suitesparse-metis-for-windows-master\lapack_windows文件夹复制到build\install
文件夹内
3.创建包含Ncorr的解决方案
3.1 Copy源码
创建一个新的解决方案,将下载好的Ncorr文件夹解压,找到include文件夹和src文件夹,将里面的源码分别倒入到头文件和源文件中,并新增一个ncorr_test.cpp放置“...\ncorr_2D_cpp-master\test\src\ncorr_test.cpp”
3.2 配置附加包含目录和附加库目录
找到第二步编译的3个项目,存到一个文件夹里分别命名方便寻找。
- In
C/C++ / 附加包含目录
新增$(SolutionDir)..\fftw
$(SolutionDir)..\opencv\build\x64\vc15\install\include\
$(SolutionDir)..\suitesparse\build\install\include\
- In
链接器 / 常规 /附加库目录
新增$(SolutionDir)..\fftw
$(SolutionDir)..\opencv\build\x86\vc14\install\x86\vc14\lib
$(SolutionDir)..\suitesparse\build\install\lib\
$(SolutionDir)..\suitesparse\build\install\lib\lapack_blas_windows\
- In
链接器/ 输入/ 附加依赖项
新增如下(以Debug为例,如果是Release就把下面的有后缀d的去掉):
libblas.lib
liblapack.lib
opencv_core3414d.lib
opencv_highgui3414d.lib
opencv_imgcodecs3414d.lib
opencv_imgproc3414d.lib
opencv_videoio3414d.lib
libamdd.lib
libbtfd.lib
libcamdd.lib
libccolamdd.lib
libcolamdd.lib
libcxsparsed.lib
libcholmodd.lib
libklud.lib
libldld.lib
libspqrd.lib
libumfpackd.lib
suitesparseconfigd.lib
metisd.lib
libfftw3-3.lib
3.3修改部分代码错误
①在 Array2D.h文件中
- On line 38
#include "SuiteSparseQR.hpp"
替换为 #include "suitesparse/SuiteSparseQR.hpp"
- On line 307
去掉 = PAD::ZEROS
- On line 3222
把
typename std::enable_if<std::is_same<typename container_traits<T_container2>::nonconst_container, typename base_region<T_container>::nonconst_container>::value, base_region<T_container>&>::type base_region<T_container>::operator=(const base_region<T_container2> ®) {
替换为
auto base_region<T_container>::operator=(const base_region<T_container2>& reg) -> typename std::enable_if<std::is_same<typename container_traits<T_container2>::nonconst_container, nonconst_container>::value, base_region&>::type {
②在Array2D.h文件中
把重载报错的全部写到声明处,如:
可以直接下载我修改好的Array2D.h 文件 文件链接:Array2D.h
3.4 放置dll
不再赘述,提示缺啥dll就去前面编译的3个文件夹内查找放到解决方案内即可
最后:
在命令参数填入:caculate,执行即可