# ubuntu环境下编译运行OpenCorr以及存在的问题
OpenCorr: 开源DIC/DVC程序开发库 https://www.opencorr.org/
这是新开源的dic项目,但是目前是在windows平台下运行的。本人将其移植到linux平台,过程中遇到的问题和解决方法如下。
## 环境要求:
1、因为需要用到SIFT,因此opencv版本最好为3.4.2的contrib版本。(3.4.2以后的版本没有SIFT!!!Cmake的时候一定要加上 -D OPENCV_ENABLE_NONFREE=ON )
安装方法可以参考教程:
https://blog.csdn.net/bj233/article/details/113351023
https://blog.csdn.net/heiheiya/article/details/82590601
2、还需要eigen和fftw3。(ubuntu安装方法参考网上的方法,apt-get)
## win10移植到linux过程中的一些问题
1、部分#include <xxx\xxx> 里面的斜杠换成/ (报错了就修改一下)
2、提示:error: no matching function for call to 'std::exception:exception(const char[16])' 这是windows移植到ubuntu的问题
解决方法,改成throw std::exception(std::logic_error("XXXXX")); ,如果还是报错,加头文件#include <stdexcept>
3、simple里的代码,#include "opencorr.h"要改成#include "OpenCorr.h",大小写区分
重点!!!CMakeLists.txt和文件目录
cmake_minimum_required(VERSION 2.8)
project(OpenCorr)
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release)
endif()
message("\nBuild type: " ${CMAKE_BUILD_TYPE}) #输出显示build类型
find_package( OpenMP REQUIRED)
if( CMAKE_BUILD_TYPE MATCHES Release) #如果是release模式。开启O3优化
if(OPENMP_FOUND)
set(CMAKE_CXX_FLAGS "-std=c++14 -Wall -O3 -march=native -DNDEBUG ${OpenMP_CXX_FLAGS} -lm -lfftw3" )
message(STATUS "-std=c++14 -Wall -O3 -march=native -DNDEBUG OpenMP" )
else()
set(CMAKE_CXX_FLAGS "-std=c++14 -Wall -O3 -march=native -DNDEBUG -lm -lfftw3")
message(STATUS "-std=c++14 -Wall -O3 -march=native -DNDEBUG")
endif()
endif()
if( CMAKE_BUILD_TYPE MATCHES Debug) #如果是Debug模式。开启O0优化 #如果是debug模式。开启O0优化
if(OPENMP_FOUND)
set(CMAKE_CXX_FLAGS "-std=c++14 -Wall -O0 -march=native -DNDEBUG ${OpenMP_CXX_FLAGS} -lm -lfftw3" )
message(STATUS "-std=c++14 -Wall -O0 -march=native -DNDEBUG OpenMP" )
else()
set(CMAKE_CXX_FLAGS "-std=c++14 -Wall -O0 -march=native -DNDEBUG -lm -lfftw3")
message(STATUS "-std=c++14 -Wall -O0 -march=native -DNDEBUG")
endif()
endif()
################################设置头文件、源文件、资源文件################################
# 添加头文件路径
include_directories(
./include )
# 该命令可以批量添加文件夹 ./src 下的所有源文件到 SRCFILES
# aux_source_directory(./src SRCFILES )
set(INCLUDE_FILES # 设置头文件
../include/oc_array.h
../include/oc_bicubic_bspline.h
../include/oc_calibration.h
../include/oc_deformation.h
../include/oc_dic.h
../include/oc_epipolar_search.h
../include/oc_feature.h
../include/oc_feature_affine.h
../include/oc_fftcc.h
../include/oc_gradient.h
../include/oc_icgn.h
../include/oc_image.h
../include/oc_interpolation.h
../include/oc_io.h
../include/oc_poi.h
../include/oc_point.h
../include/oc_sift.h
../include/oc_stereovision.h
../include/oc_strain.h
../include/oc_subset.h
../include/OpenCorr.h
)
set(SRC_FILES # 设置源文件
../src/oc_array.cpp
../src/oc_bicubic_bspline.cpp
../src/oc_calibration.cpp
../src/oc_deformation.cpp
../src/oc_dic.cpp
../src/oc_epipolar_search.cpp
../src/oc_feature.cpp
../src/oc_feature_affine.cpp
../src/oc_fftcc.cpp
../src/oc_gradient.cpp
../src/oc_icgn.cpp
../src/oc_image.cpp
../src/oc_io.cpp
../src/oc_poi.cpp
../src/oc_point.cpp
../src/oc_sift.cpp
../src/oc_stereovision.cpp
../src/oc_strain.cpp
../src/oc_subset.cpp
)
set(SOURCE_FILES # 设置资源文件
./README.md)
##########################################寻找第三方库#############################################
# 寻找opencv库并添加头文件路径
find_package(OpenCV REQUIRED)
# 寻找多线程库
find_package(Threads)
# Add fftw library
FIND_LIBRARY(FFTW_LIBRARIES NAMES fftw3)
include_directories(${OpenCV_INCLUDE_DIRS}
"/usr/include/eigen3/"
"/usr/include/eigen3/Eigen"
${FFTW_INCLUDE_DIRS}
)
##############################编译该工程库,并将第三方库链接工程库#########################################
# 将源文件、头文件、资源文件编译一个该工程库
add_library(${PROJECT_NAME} SHARED ${SRC_FILES} ${INCLUDE_FILES} ${SOURCE_FILES})
# 将opencv和多线程库,链接到该工程库
target_link_libraries(${PROJECT_NAME}
${OpenCV_LIBS}
${CMAKE_THREAD_LIBS_INIT}
${FFTW_LIBRARIES}
/usr/lib/x86_64-linux-gnu/libfftw3f.a
)
###################设置编译输出路径和运行路径,添加可执行文件,并将工程库链接到可执行文件上#######################
# 设置输出文件和运行路径在当前目录下的bin中
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin)
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
# 例子1
add_executable(exe1 ../samples/test_2d_dic_fftcc_icgn1.cpp)
target_link_libraries(exe1 ${PROJECT_NAME}) #链接工程库到可执行文件
# 例子2
add_executable(exe2 ../samples/test_2d_dic_sift_icgn2.cpp)
target_link_libraries(exe2 ${PROJECT_NAME}) #链接工程库到可执行文件
版权声明:本文为qq_39638989原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。