sift源码编译,其实不要叫做编译,因为我们没有把他编译成像opencv库那样来使用,我们是直接使用它的源码的。
这是我的结果:在项目的属性->配置属性->调试 右边找到命令参数输入两个项目下的两张照片 5.jpg 6.jpg 即可运行程序
Sift算法可能你懂,但是用代码实现就困难,所以直接使用别人的源码吧。
主要步骤看此文章,我就是按照这篇文章的步骤完成的,神操作
http://www.cnblogs.com/cql/archive/2013/05/23/3095749.html
http://blog.csdn.net/jiangsan870211/article/details/45460119
因为我的环境有点不一样,我就说说我遇到的一些奇葩问题吧(上面那个文章可能没有遇到的问题)。
Sift源码也使用了其他库的文件(opencv和gtk+)
所以先配置好opencv和gtk+因为opencv和gtk+都是已经被编译在windwos下的lib了。所以关于这两个库你有四个步骤需要完成:
1 找到bin文件夹,将其目录添加电脑的path变量中
2 含Include的文件夹目录添加
3 含lib的文件夹目录添加
4 连接器->输入添加
以上四步按照那个文章来就行没问题的。
好了,开始解决跑起来的一些列问题。
我的环境VS2013 系统windows2008 opencv2.4.9
再来运行sift里面含有main函数的文件(src中的match.c、dspfeat.c和siftfeat.c中都含有main函数,分别实现两张图片匹配、读取存在文件中的图像特征并显示和计算输入图像的SIFT特征,源文件中只能添加三个中的一个。我这里选择添加match.c)
错误
1 error C4996: 'fopen': Thisfunction or variable may be unsafe. Consider using fopen_s instead. To disabledeprecation, use _CRT_SECURE_NO_WARNINGS. See online help fordetails. e:\opencv\build\include\opencv2\flann\logger.h 66 1 siftTest2.0
解决方案:项目=》属性 =》c/c++ =》预处理器=》点击预处理器定义,编辑,加入_CRT_SECURE_NO_WARNINGS,即可。
2 5 error C2589: “(”:“::”右边的非法标记 e:\opencv\build\include\opencv2\flann\lsh_table.h 266 1 siftTest2.0
解决方案:删除std
3 我创建的工程名siftTest2.0,siftTest2.0.cpp文件自动生成且含有_Main函数,你需要注释掉这个文件里面所有的代码,只保留#include "stdafx.h",这样程序就可以从match.c开始执行。
这样你就可以完美使用sift源码:注意这里我们用的opencv和gtk+都是编译好的库,其实sift可以编译成库的,我们可以像使用opencv这个库一样的使用编译好的sift库。