
经典算法 SIFT 实现即代码解释:
以下便是 sift 源码库编译后的效果图:

为了给有兴趣实现 sift 算法的朋友提供个参考,特整理此文如下。要了解什
么是 sift 算法,请参考:九、图像特征提取与匹配之
SIFT
算 法。ok,咱们下面,
就来利用 Rob Hess 维护的 sift 库来实现 sift 算法:
首先,请下载 Rob Hess 维护的 sift 库:
http://blogs.oregonstate.edu/hess/code/sift/
下载 Rob Hess 的这个压缩包后,如果直接解压缩,直接编译,那么会出现下
面的错误提示:
编 译 提 示 :error C1083: Cannot open include file: 'cxcore.h': No such file or
directory,找不到这个头文件。
这个错误,是因为你还没有安装 opencv,因为:cxcore.h 和 cv.h 是开源的
OPEN CV 头文件,不是 VC++的默认安装文件,所以你还得下载 OpenCV 并进行
安装。然后,可以在 OpenCV 文件夹下找到你所需要的头文件了。
据网友称,截止 2010 年 4 月 4 日,还没有在 VC6.0 下成功使用 opencv2.0 的
案 例 。 所 以 , 如 果 你 是 VC6.0 的 用 户 请 下 载 opencv1.0 版 本 。 vs 的 话 ,
opencv2.0,1.0 任意下载。
以下,咱们就以 vc6.0 为平台举例,下载并安装 opencv1.0 版本、gsl 等。当然,
你也可以用 vs 编译,同样下载 opencv(具体版本不受限制)、gsl 等。
请按以下步骤操作:
一、下载 opencv1.0
http://sourceforge.net/projects/opencvlibrary/files/opencv-win/1.0/

OpenCV_1.0.exe/download
二、安装 opencv1.0,配置 Windows 环境变量
1、安装注意:假如你是将 OpenCV 安装到 C:/Program Files/OpenCV(如果你
安装的时候选择不是安装在 C 盘,则下面所有对应的 C 盘都改为你所安装在的
那个“X 盘”,即可),在安装时选择"将/OpenCV/bin 加入系统变量",打上“勾”。
(Add/OpenCV/bin to the systerm PATH。这一步确认选上了之后,下面的检查
环境变量的步骤,便可免去)
2 、 检 查 环 境 变 量 。 为 了 确 保 上 述 步 骤 中 , 加 入 了 系 统 变 量 , 在 安 装
opencv1.0 成功后,还得检查 C:/Program Files/OpenCV/bin 是否已经被加入到环
境变量 PATH,如果没有,请加入。
3、最后是配置 Visual C++ 6.0。
全局设置
菜单 Tools->Options->Directories:先设置 lib 路径,选择 Library files,在下方
填入路径:
C:/Program Files/OpenCV/lib
然后选择 include files,在下方填入路径(参考下图):
C:/Program Files/OpenCV/cxcore/include
C:/Program Files/OpenCV/cv/include
C:/Program Files/OpenCV/cvaux/include
C:/Program Files/OpenCV/ml/include
C:/Program Files/OpenCV/otherlibs/highgui
C:/Program Files/OpenCV/otherlibs/cvcam/include

最后选择 source files,在下方填入路径:
C:/Program Files/OpenCV/cv/src
C:/Program Files/OpenCV/cxcore/src
C:/Program Files/OpenCV/cvaux/src
C:/Program Files/OpenCV/otherlibs/highgui
C:/Program Files/OpenCV/otherlibs/cvcam/src/windows
项目设置
每创建一个将要使用 OpenCV 的 VC Project,都需要给它指定需要的 lib。菜
单:Project->Settings,然后将 Setting for 选为 All Configurations,然后选择右边
的 link 标签,在 Object/library modules 附加上:
cxcore.lib cv.lib ml.lib cvaux.lib highgui.lib cvcam.lib
当然,你不需要这么多 lib,你可以只添加你需要的 lib(见下图)

三、下载 gsl,gsl 也是一个库,也需要下载:
http://sourceforge.net/projects/gnuwin32/files/gsl/1.8/gsl-1.8.exe/download 。 在
编译时候 GSL 也是和 OpenCV 一样要把头文件和 lib 的路径指定好。
四、配置 gsl
将 C:/WinGsl/bin 中的 WinGsl.dll 和 WinGslD.dll 复制到 C:/VC6.0/Bin;将整个
Gsl 目 录复制到 C:/VC6.0/Bin 下; lib 目 录下 的所有 .lib 文 件全部 复制到 C:/
VC6.0/Lib 下。
然后,在 tools-options-directories 中,将 C:/WinGsl 下的 lib,gsl 分别加入到
库文件和头文件的搜索路径中。
以下是可能会出现的错误情况处理:
I、OpenCV 安装后“没有找到 cxcore100.dll”的错误处理
在安装时选择“将/OpenCV/bin 加入系统变量”(Add/OpenCV/bin to the systerm
PATH)。 但该选项并不一定能成功添加到系统变量,如果编写的程序在运行
时出现“没有找到 cxcore100.dll,因为这个应用程序未能启动。重新安装应用程
序可能会修复此问题。”的错误。
手动在我的电脑->属性->高级->环境变量->系统变量->path 添加 c:/program
files/opencv/bin;添加完成后需要重启计算机。
II、vc6.0 下配置了一下,可是编译程序时遇到如下一个错误:
Linking... LINK : fatal error LNK1104: cannot open file"odbccp32.libcxcore.lib"
可能是:在 工程设置 的时候添加 连接库 时没加空 格或 .来把两 个文件名
(odbccp32.lib cxcore.lib)分开。注意每一次操作后,记得保存。
若经过以上所有的步骤之后,如果还不能正常编译,那就是还要稍微修改下
你下载的 Rob Hess 代码。ok,日后,若有空,再好好详细剖析下此 sift 的源码。
最后,祝你编译顺利。