DBoW是一个开源的将图片集转换为词袋表示的库,其采用了hierarchical tree用来实现在图片特征空间中寻找近似最近邻(approximating nearest neighbours)并生成视觉词汇,项目地址是:
DBoW3
该库由于被 ORB-SLAM 采用用于回环检测,因此逐渐被大家接受并广泛应用于回环检测、图片检索等领域。
最近在配置该库的过程中,发现网上的大部分博客都是该库在Linux下的配置,相对来说较为容易。由于种种原因,我需要在windows平台使用该库,在配置过程中我发现了很多问题,所以记录下来。我使用的是win7 + vs2017。
首先我们将该库源码 DBoW3 下载至本地,然后需要下载windows版本的 cmake,该库的\DBow3-master\DBow3-master\src 下的CMakeLists.txt文件写的有一些问题,在windows下无法成功编译。 因此,我们需要将其进行一些修改,即将最后几行注释掉:
cmake_minimum_required(VERSION 3.12)
INCLUDE_DIRECTORIES(. ./utils/)
FILE(GLOB hdrs_base "*.h" )
FILE(GLOB srcs_base "*.c*")
FILE(GLOB hdrs ${hdrs_base} )
FILE(GLOB srcs ${srcs_base} )
ADD_LIBRARY(${PROJECT_NAME} ${srcs} ${hdrs})
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR} )
SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES # create *nix style library versions + symbolic links
DEFINE_SYMBOL DBOW_DSO_EXPORTS
VERSION ${PROJECT_VERSION}
SOVERSION ${PROJECT_SOVERSION}
CLEAN_DIRECT_OUTPUT 1 # allow creating static and shared libs without conflicts
OUTPUT_NAME "${PROJECT_NAME}${PROJECT_DLLVERSION}" # avoid conflicts between library and binary target names
)
TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${REQUIRED_LIBRARIES} )
#INSTALL(TARGETS ${PROJECT_NAME}
# RUNTIME DESTINATION bin COMPONENT main # Install the dll file in bin directory
# LIBRARY DESTINATION ${LIB_INSTALL_DIR} PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE COMPONENT main
# ) # Install the dll.a file in lib directory
#INSTALL(FILES ${hdrs_base}
# DESTINATION include/${PROJECT_NAME}
# COMPONENT main)
修改完成后,我们打开之前下载好的windows版CMake,选择好源码的地址及生成地址(此处建议在文件目录下简历build文件夹用来保存编译好的文件),如下图所示:
分别点击左下角Configure 和 Generate,即可在刚刚的build文件夹下生成一个 Project.sln 文件,使用vs打开该工程。
由于DBoW3库对OpenCV有依赖,因此,我们可以参考其他vs下配置OpenCV的方法对刚刚的工程进行配置,此处注意,我们编译好DBoW库的是32位的,因此需要配置x86的OpenCV,好像现在下载的OpenCV都不提供x86的lib了,因此可以参考以下博客编译x86版本的OpenCV:
https://blog.csdn.net/sinat_27953939/article/details/68948313
通过以上配置好后,我们点击生成方案,即可在\build\Release文件夹下得到Project.lib文件
此后需要使用该库的工程中,在工程属性中进行配置 配置属性 -> VC++目录:
包含目录下添加 我们的源码地址 DBow3-master\DBow3-master\src,库目录中添加我们生成的lib文件的地址 \DBow3-master\DBow3-master\build\Release即可
如下图 配置属性 -> 链接器 -> 输入下的附加依赖项中我们写入Project.lib即可
至此,可以添加位于 \DBow3-master\DBow3-master\utils 下的 demo_general.cpp 文件至工程内,测试我们的安装是否成功~