NCORR DIC: c++ port for Windows using Microsoft Visual Studio C++ 2017.
①打开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最终编译好的文件
①将下载好的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个文件,如下
①运行 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
文件夹内
创建一个新的解决方案,将下载好的Ncorr文件夹解压,找到include文件夹和src文件夹,将里面的源码分别倒入到头文件和源文件中,并新增一个ncorr_test.cpp放置“...\ncorr_2D_cpp-master\test\src\ncorr_test.cpp”
找到第二步编译的3个项目,存到一个文件夹里分别命名方便寻找。
C/C++ / 附加包含目录
新增
$(SolutionDir)..\fftw
$(SolutionDir)..\opencv\build\x64\vc15\install\include\
$(SolutionDir)..\suitesparse\build\install\include\
链接器 / 常规 /附加库目录
新增
$(SolutionDir)..\fftw
$(SolutionDir)..\opencv\build\x86\vc14\install\x86\vc14\lib
$(SolutionDir)..\suitesparse\build\install\lib\
$(SolutionDir)..\suitesparse\build\install\lib\lapack_blas_windows\
链接器/ 输入/ 附加依赖项
新增如下(以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
①在 Array2D.h文件中
#include "SuiteSparseQR.hpp"
替换为 #include "suitesparse/SuiteSparseQR.hpp"
去掉 = PAD::ZEROS
把
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
不再赘述,提示缺啥dll就去前面编译的3个文件夹内查找放到解决方案内即可
最后:
在命令参数填入:caculate,执行即可