ubuntu环境下编译运行OpenCorr以及存在的问题

# 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版权协议,转载请附上原文出处链接和本声明。