vs2013下openSIFT的编译调试

本文的目标是,用vs2013搭建openSIFT源码开发环境。由于openSIFT源码是linux环境下,本文的工作是用cmake来生成vs2013下的开发环境。主要参考这篇文章,由于基本环境有些差别,所以需要做一些修改。加上个人对cmake写法不熟悉,走了一些弯路,这里也做一个记录和说明。

环境:vs2013, opencv2.4.10, GTK2.24, cmake 3.3.0, openSIFT(github)

cmake过程需要编辑CMakeLists.txt文件,这里把整个文件列出,并做一些简单说明:

#############从这里开始##################
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)

PROJECT(OpenSIFT)

#dependencies
SET(OPENCV_ROOT D:/Program\ Files/opencv/build)                   #注意路径
SET(OPENCV_LIB D:/Program\ Files/opencv/build/x86/vc12/lib)
SET(GTK_ROOT D:/Program\ Files/gtk+-bundle_2.24.10-20120208_win32)

INCLUDE_DIRECTORIES("${OPENCV_ROOT}/include" "${OPENCV_ROOT}/include/opencv" "include")   #注意空格,注意路径
LINK_DIRECTORIES("${OPENCV_ROOT}/x64/vc12/lib")

SET(LINK_LIBRARY_OPENCV
        ${OPENCV_LIB}/opencv_core2410.lib        #注意路径,注意版本
		${OPENCV_LIB}/opencv_core2410d.lib
        ${OPENCV_LIB}/opencv_highgui2410.lib 
		${OPENCV_LIB}/opencv_highgui2410d.lib
        ${OPENCV_LIB}/opencv_imgproc2410.lib 
		${OPENCV_LIB}/opencv_imgproc2410d.lib
        )
message(${LINK_LIBRARY_OPENCV})

SET(LINK_LIBRARY_GTK
        ${GTK_ROOT}/lib/gtk-win32-2.0.lib      #注意路径,注意版本
        ${GTK_ROOT}/lib/gdk-win32-2.0.lib
        )
############################################################################
#libopensift
SET(LIBOPENSIFT libopensift)
ADD_LIBRARY(${LIBOPENSIFT} STATIC				    #注意空格
        src/imgfeatures.c include/imgfeatures.h
        src/kdtree.c include/kdtree.h
        src/minpq.c include/minpq.h
        src/sift.c include/sift.h
        src/utils.c include/utils.h
        src/xform.c include/xform.h
        )
		
message(${LIBOPENSIFT})

SET_TARGET_PROPERTIES(${LIBOPENSIFT} PROPERTIES OUTPUT_NAME_DEBUG ${LIBOPENSIFT}d )
SET_TARGET_PROPERTIES(${LIBOPENSIFT} PROPERTIES OUTPUT_NAME_RELEASE ${LIBOPENSIFT} )
TARGET_INCLUDE_DIRECTORIES(libopensift PUBLIC     #注意空格
        "${GTK_ROOT}/include"
        "${GTK_ROOT}/include/gtk-2.0"
        "${GTK_ROOT}/include/cairo"
        "${GTK_ROOT}/include/pango-1.0"
        "${GTK_ROOT}/include/atk-1.0"
        "${GTK_ROOT}/include/pixman-1"
        "${GTK_ROOT}/include/freetype2"
        "${GTK_ROOT}/include/libpng14"
        "${GTK_ROOT}/include/gdk-pixbuf-2.0"
        "${GTK_ROOT}/include/glib-2.0"
        "${GTK_ROOT}/lib/glib-2.0/include"
        )

TARGET_LINK_LIBRARIES(libopensift ${LINK_LIBRARY_OTHERS})

SET(LINK_LIBRARY_SIFT
#        E:/opensift/lib/${LIBOPENSIFT}.lib 		#未编译出libopensift.lib文件,只好把这里注释掉,原因不明
		E:/opensift/lib/${LIBOPENSIFT}d.lib
        )

SET(LINK_LIBRARY_OTHERS ${LINK_LIBRARY_GTK} ${LINK_LIBRARY_OPENCV})
SET(LINK_LIBRARY_ALL ${LINK_LIBRARY_GTK} ${LINK_LIBRARY_OPENCV} ${LINK_LIBRARY_SIFT})
############################################################################
#siftfeat
SET(SIFTFEAT siftfeat)
ADD_EXECUTABLE(${SIFTFEAT}
        src/siftfeat.c
        include/getopt.h							#unistd.h文件为linux所有,依赖getopt.h,需要下载并放在该目录下
        src/getopt.c
        )

TARGET_LINK_LIBRARIES(${SIFTFEAT} ${LINK_LIBRARY_ALL})
SET_TARGET_PROPERTIES(${SIFTFEAT} PROPERTIES OUTPUT_NAME_DEBUG ${SIFTFEAT}d )
SET_TARGET_PROPERTIES(${SIFTFEAT} PROPERTIES OUTPUT_NAME_RELEASE ${SIFTFEAT} )
############################################################################
#match
SET(MATCH match)								#注意空格
ADD_EXECUTABLE(${MATCH}
        src/match.c
        include/getopt.h						#unistd.h文件为linux所有
        src/getopt.c
        )
TARGET_LINK_LIBRARIES(${MATCH} ${LINK_LIBRARY_ALL})
SET_TARGET_PROPERTIES(${MATCH} PROPERTIES OUTPUT_NAME_DEBUG ${MATCH}d )
SET_TARGET_PROPERTIES(${MATCH} PROPERTIES OUTPUT_NAME_RELEASE ${MATCH} )

############################################################################

#dspfeat
SET(DSPFEAT dspfeat)						#注意空格
ADD_EXECUTABLE(${DSPFEAT}
        src/dspfeat.c
        include/getopt.h					#unistd.h文件为linux所有
        src/getopt.c
        )

TARGET_LINK_LIBRARIES(${DSPFEAT} ${LINK_LIBRARY_ALL})
SET_TARGET_PROPERTIES(${DSPFEAT} PROPERTIES OUTPUT_NAME_DEBUG ${DSPFEAT}d )
SET_TARGET_PROPERTIES(${DSPFEAT} PROPERTIES OUTPUT_NAME_RELEASE ${DSPFEAT} )

建议先学习一下cmake相关规则,CMakeLists.txt都要做一些修改,主要如下:

(1). 这篇文章中丢失了很多空格,直接copy过来会有不少错误;

(2). 所有依赖文件的路径,版本都必须和自己的环境完全吻合;

(3). 不清楚没能编译出libopensift.lib文件,只好把LINK_LIBRARY_SIFT中一行注释掉;

(4). windows环境下无unistd.h文件,需要下载该文件及其依赖文件,参考这篇文章

(5). openSIFT源码中gtk头文件路径可能需要修改,其他bug以及编译过程参考上文;

放上matchd运行结果




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值