SiftGPU使用GLSL语言, WINDOWS系统编译方法

前言

最近在使用国外大牛chsngchang wu写的 visualSFM,因毕设设计需要,代码需要自己每一模块编译使用。首先先引入某一仙人的博客:

http://www.cnblogs.com/gaoxiang12/p/5149067.html#commentform

该博客介绍了Ubuntu操作系统下使用命令行编译SiftGPU的方法。

因为SiftGPU的代码即使在没有英伟达显卡的电脑上也能运行出来,由于我自己不熟悉GPU的CUDA语言,并且也不会使用linux命令行的编译方法,故采用最简单的windows操作系统和GLSL编译。

我的编译环境: win7,vs2010,opencv2.4.9,OPENGL

现在开始介绍编译SiftGPU的步骤:

1)下载SiftGPU

SiftGPU可进入changchang wu的主页下载:http://grail.cs.washington.edu/projects/mcba/下载完后

解压,找到路径...//SiftGPU//msvc,在msvc文件夹中,有两个.sln,切记:SiftGPU_CUDA_Enabled.sln是需要使用 cuda编译的,若直接打开编译,会出现如下错误SiftGPU使用GLSL语言, WINDOWS系统编译方法_第1张图片

"nvcc.exe" 不是内部或外部命令。nvcc是CUDA编译器,没配置CUDA当然不能编译成功。

  2)编译SiftGPU(在活动解决方案配置的Debug和Release下都可以运行)

这时,你应该注意到还有一个SiftGPU.sln,这可能是changchang wu团队们提供的另一个编译方案(不需要 GPU的CUDA语言)。打开它编译,生成成功!这时候你可以看到lib文件夹下和bin文件夹下有新生成的SiftGPU_d.dll和SiftGPU_d.lib,将它们分别添加到你安装vs2010路径下的bin文件夹和lib文件夹中。为了保险起见,我还将它们分别添加到了C:\Windows\System32C:\Program Files(x86)\Microsoft SDKs\Windows\7.0A\Lib文件夹下。

 这时候可以在VS2010中新建一个siftgpu_test的项目,点击属性管理器中Microsoft.Cpp.Win32.user的右键配置属性,将刚刚添加的路径D:\vs2010\VC\lib添加到库目录中。(为了后续使用SiftGPU时不用每次配置)

SiftGPU使用GLSL语言, WINDOWS系统编译方法_第2张图片

并且在完成:链接器->输入->附加依赖项中添加SiftGPU_d.lib。

SiftGPU使用GLSL语言, WINDOWS系统编译方法_第3张图片

至此已完成SiftGPU在VS中的配置,后续使用时只需添加SiftGPU头文件即可啦!

3)测试SiftGPU

在刚刚我新建的siftgpu_test工程中,编写一个c++程序。

// sift_test.cpp : 定义控制台应用程序的入口点。
//

// test_SiftGPU.cpp : 定义控制台应用程序的入口点。
//

#include "StdAfx.h"

//标准C++
#include 
#include 


// OpenCV图像
#include 
#include 


// SiftGPU模块
#include 


// boost库中计时函数
//#include 

// OpenGL
#include 
#include 

#pragma comment(lib,"devil.lib")
#pragma comment(lib,"ilu.lib")
#pragma comment(lib,"ilut.lib")

using namespace std;

int main( int argc, char** argv)
{
    //声明SiftGPU并初始化
    SiftGPU sift;
    char* myargv[4] ={ "-fo", "-1", "-v", "1"};
    sift.ParseParam(4, myargv);

    //检查硬件是否支持SiftGPU
    int support = sift.CreateContextGL();
    if ( support != SiftGPU::SIFTGPU_FULL_SUPPORTED )
    {
        cerr<<"SiftGPU is not supported!"<SiftGPU使用GLSL语言, WINDOWS系统编译方法_第4张图片

此时可以看到提取的兴趣点数为2783,效果应该是杠杠的。

 代码中我将boost 库的计时timer.hpp注释掉了,使用计时它的计时功能还需要配置boost库就会有点麻烦。

若有网友需要见识一下SiftGPU 提取sift的速度可下载配置boost库,以下是我配置boost的结果(我的电脑运行出来的速度可能稍微有点慢)

SiftGPU使用GLSL语言, WINDOWS系统编译方法_第5张图片

这时候会出现 cost time为0的情况,具体原因尚未找出,可能涉及需要更改SiftGPU源代码中相关代码。

过程中还得感谢某位学长的帮助,本人只是个半吊子的理工女,有啥意见和建议欢迎指出和讨论。

附上个人邮箱:[email protected]以及QQ:931409544


你可能感兴趣的:(SiftGPU使用GLSL语言, WINDOWS系统编译方法)