1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166
|
set(OPENCV_MODULE_IS_PART_OF_WORLD FALSE)
set(the_description "SFM algorithms")
### LIBMV LIGHT EXTERNAL DEPENDENCIES ###
find_package(Ceres QUIET)
if(NOT Gflags_FOUND) # Ceres find gflags on the own, so separate search isn't necessary
find_package(Gflags QUIET)
endif()
if(NOT Glog_FOUND) # Ceres find glog on the own, so separate search isn't necessary
find_package(Glog QUIET)
endif()
if(NOT Gflags_FOUND OR NOT Glog_FOUND)
# try local search scripts
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake")
if(NOT Gflags_FOUND)
find_package(Gflags QUIET)
endif()
if(NOT Glog_FOUND)
find_package(Glog QUIET)
endif()
endif()
if(NOT DEFINED GFLAGS_INCLUDE_DIRS AND DEFINED GFLAGS_INCLUDE_DIR)
set(GFLAGS_INCLUDE_DIRS "${GFLAGS_INCLUDE_DIR}")
endif()
if(NOT DEFINED GLOG_INCLUDE_DIRS AND DEFINED GLOG_INCLUDE_DIR)
set(GLOG_INCLUDE_DIRS "${GLOG_INCLUDE_DIR}")
endif()
if((gflags_FOUND OR Gflags_FOUND OR GFLAGS_FOUND OR GFLAGS_INCLUDE_DIRS) AND (glog_FOUND OR Glog_FOUND OR GLOG_FOUND OR GLOG_INCLUDE_DIRS))
set(__cache_key "${GLOG_INCLUDE_DIRS} ~ ${GFLAGS_INCLUDE_DIRS} ~ ${GLOG_LIBRARIES} ~ ${GFLAGS_LIBRARIES}")
if(NOT DEFINED SFM_GLOG_GFLAGS_TEST_CACHE_KEY OR NOT (SFM_GLOG_GFLAGS_TEST_CACHE_KEY STREQUAL __cache_key))
set(__fname "${CMAKE_CURRENT_LIST_DIR}/cmake/checks/check_glog_gflags.cpp")
try_compile(
SFM_GLOG_GFLAGS_TEST "${CMAKE_BINARY_DIR}" "${__fname}"
CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:STRING=${GLOG_INCLUDE_DIRS};${GFLAGS_INCLUDE_DIRS}"
LINK_LIBRARIES ${GLOG_LIBRARIES} ${GFLAGS_LIBRARIES}
OUTPUT_VARIABLE __output
)
if(NOT SFM_GLOG_GFLAGS_TEST)
file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
"Failed compilation check: ${__fname}\n"
"${__output}\n\n"
)
endif()
set(SFM_GLOG_GFLAGS_TEST "${SFM_GLOG_GFLAGS_TEST}" CACHE INTERNAL "")
set(SFM_GLOG_GFLAGS_TEST_CACHE_KEY "${__cache_key}" CACHE INTERNAL "")
message(STATUS "Checking SFM glog/gflags deps... ${SFM_GLOG_GFLAGS_TEST}")
endif()
unset(__cache_key)
set(SFM_DEPS_OK "${SFM_GLOG_GFLAGS_TEST}")
else()
set(SFM_DEPS_OK FALSE)
endif()
if(NOT HAVE_EIGEN OR NOT SFM_DEPS_OK)
set(DISABLE_MSG "Module opencv_sfm disabled because the following dependencies are not found:")
if(NOT HAVE_EIGEN)
set(DISABLE_MSG "${DISABLE_MSG} Eigen")
endif()
if(NOT SFM_DEPS_OK)
set(DISABLE_MSG "${DISABLE_MSG} Glog/Gflags")
endif()
message(STATUS ${DISABLE_MSG})
ocv_module_disable(sfm)
endif()
### LIBMV LIGHT DEFINITIONS ###
set(LIBMV_LIGHT_INCLUDES
"${CMAKE_CURRENT_LIST_DIR}/src/libmv_light"
"${OpenCV_SOURCE_DIR}/include/opencv"
"${GLOG_INCLUDE_DIRS}"
"${GFLAGS_INCLUDE_DIRS}"
)
set(LIBMV_LIGHT_LIBS
correspondence
multiview
numeric
${GLOG_LIBRARIES}
${GFLAGS_LIBRARIES}
)
if(Ceres_FOUND)
add_definitions("-DCERES_FOUND=1")
list(APPEND LIBMV_LIGHT_LIBS simple_pipeline)
if(Ceres_VERSION VERSION_LESS 2.0.0)
list(APPEND LIBMV_LIGHT_INCLUDES "${CERES_INCLUDE_DIRS}")
endif()
else()
add_definitions("-DCERES_FOUND=0")
message(STATUS "CERES support is disabled. Ceres Solver for reconstruction API is required.")
endif()
### CREATE OPENCV SFM MODULE ###
ocv_add_module(sfm
opencv_core
opencv_calib3d
opencv_features2d
opencv_xfeatures2d
opencv_imgcodecs
WRAP python
)
add_definitions(/DGLOG_NO_ABBREVIATED_SEVERITIES) # avoid ERROR macro conflict in glog (ceres dependency)
ocv_warnings_disable(CMAKE_CXX_FLAGS
-Wundef
-Wshadow
-Wsign-compare
-Wmissing-declarations
-Wunused-but-set-variable
-Wunused-parameter
-Wunused-function
-Wsuggest-override
)
ocv_include_directories( ${LIBMV_LIGHT_INCLUDES} )
ocv_module_include_directories()
# source files
FILE(GLOB OPENCV_SFM_SRC src/*.cpp)
# define the header files (make the headers appear in IDEs.)
FILE(GLOB OPENCV_SFM_HDRS include/opencv2/sfm.hpp include/opencv2/sfm/*.hpp)
ocv_set_module_sources(HEADERS ${OPENCV_SFM_HDRS}
SOURCES ${OPENCV_SFM_SRC})
ocv_create_module()
### BUILD libmv_light ###
if(NOT CMAKE_VERSION VERSION_LESS 2.8.11) # See ocv_target_include_directories() implementation
if(TARGET ${the_module})
get_target_property(__include_dirs ${the_module} INCLUDE_DIRECTORIES)
include_directories(${__include_dirs})
endif()
endif()
#include_directories(${OCV_TARGET_INCLUDE_DIRS_${the_module}})
add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/src/libmv_light" "${CMAKE_CURRENT_BINARY_DIR}/src/libmv")
ocv_target_link_libraries(${the_module} ${LIBMV_LIGHT_LIBS})
### CREATE OPENCV SFM TESTS ###
ocv_add_accuracy_tests()
if(Ceres_FOUND AND TARGET opencv_test_sfm)
ocv_target_link_libraries(opencv_test_sfm ${CERES_LIBRARIES})
endif ()
### CREATE OPENCV SFM SAMPLES ###
if(Ceres_FOUND)
ocv_add_samples(opencv_viz)
endif ()
|