siftGPU在Windows下编译,build siftGPU in Windows10 on vs.

零、说明

我这次编译的时候比较费神,主要还是一眼障目,不见泰山。看到gluglew之类的lib比较像,以为原本设好了,然后导致一直相关函数引用失败。

0.1 主要参考网页

SiftGPU在Ubuntu和Windows下的编译与使用;

SIFTGPU编译及测试;

SLAM拾萃(3):siftGPU;

一、SiftGPU 下载

原本的给的网址SiftGPU主页http://www.cs.unc.edu/~ccwu/siftgpu/已经不能用了,然后就去githubgithub仓库:SiftGPU,但是下载下来实在是太慢了,最后在码云上面下载的码云仓库:SiftGPU,使用登录码云下载zip,还是使用HTTPS克隆仓库看个人习惯,我是使用HTTPS链接放到github desktop里面克隆整个仓库的。

二、在visual studio 下面编译

2.1 准备工作

需要下载glew;
需要下载DevIL;
然后解压出来。

2.2 构建 SiftGPU.sln

下载下来的仓库目录应该是如下这样

.
├─bin
├─data
├─demos
├─doc
│  └─evaluation
├─lib
├─msvc
│  ├─ServerSiftGPU
│  ├─SiftGPU
│  └─TestWin
└─src
    ├─ServerSiftGPU
    ├─SiftGPU
    └─TestWin

msvc文件夹下找到SiftGPU.sln,双击打开,我这儿默认是使用visual studio 2017打开的,打开后会提示升级,正常升级即可。
接下来配置glewDevIL
在项目SiftGPU上右键属性,然后在vc++目录-->包含目录 里面添加两者的包含头文件目录,根据自己的解压路径对应修改。

D:\glew-2.1.0\include
D:\DevIL Windows SDK\include
D:\DevIL Windows SDK\include\IL

vc++目录-->库目录 里面添加两者库文件所在目录,根据自己解压地址修改具体地址

D:\glew-2.1.0\lib\Release\x64
D:\DevIL Windows SDK\lib\x64\Release

在 链接器-->输入-->附加依赖项 中添加如下内容,根据自己具体下载的库的版本来写,比如我这儿就没有*64.lb*64s.lib之类的,而项目原本写的里面是有的,记得删掉。

opengl32.lib
glu32.lib
winmm.lib
glew32.lib
glew32s.lib

接下来是关于DevIL.lib,把文件GLTexImage.cpp中第46行开始改成如下:

#ifndef SIFTGPU_NO_DEVIL
    #include "IL/il.h"
    #if  defined(_WIN64)
        #pragma comment(lib, "D:/DevIL Windows SDK/lib/x64/Release/DevIL.lib")
    #elif  defined(_WIN32) 
        #pragma comment(lib, "D:/DevIL Windows SDK/lib/x86/Release/DevIL.lib")
    #endif
#else
    #include <string.h>
#endif

右键项目,生成。

2.3 SiftGPU_CUDA_Enabled.sln 生成

同样在msvc文件夹下找到SiftGPU_CUDA_Enabled.sln,双击打开,vs2017或者 vs2019提示升级就直接升级就是了。
包含目录,库目录,附加依赖项,以及库加载代码的改动和SiftGPU.sln一致。

SiftGPU.sln方案不同的是,SiftGPU_CUDA_Enabled.sln方案中的SiftGPU_CUDA_Enabled项目包含*.cu文件,要记得把项目的右键菜单的 生成依赖项-->生成自定义 里面的cuda勾选上。如下图:

勾选项目的cuda依赖

接下来就是把*.cu文件的选项也改了。找到ProgramCU.cu文件在右键菜单-->属性 里面更改如下:

修改文件为CUDA C/C++选项

都改好后,右键项目,生成。

三、测试

首先给出测试代码如下,主要参考了高翔博士的博客。

#include "../../src/SiftGPU/SiftGPU.h"

//标准C++
#include <iostream>
#include <vector>

// OpenCV图像
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

// boost库中计时函数
//#include <boost/timer.hpp>

//#include <GL/gl.h>

#ifndef SIFTGPU_NO_DEVIL
#if  defined(_WIN64)
#pragma comment(lib, "../../lib/SIFTGPU.lib")
#elif  defined(_WIN32) 
#pragma comment(lib, "../../lib/SIFTGPU.lib")
#endif
#else
#include <string.h>
#endif

using namespace std;
int main()
{
    SiftGPU sift;

    char* argv[4] = { "-fo", "-1", "-v", "1" };
    
    double timeOneBegin, timeOneEnd;
    timeOneBegin = (double)clock() / CLOCKS_PER_SEC;

    sift.ParseParam(4, argv);
    int support = sift.CreateContextGL();
    if (support != SiftGPU::SIFTGPU_FULL_SUPPORTED)
    {
        return 0;
    }

    //测试直接读取一张图像
    cout << "running sift" << endl;
    timeOneBegin = (double)clock() / CLOCKS_PER_SEC;

    //在此填入你想测试的图像的路径!不要用我的路径!不要用我的路径!不要用我的路径!
    sift.RunSIFT("你的图片路径");
    cout << "siftgpu::runsift() cost time=" << (double)clock() / CLOCKS_PER_SEC - timeOneBegin << endl;

    // 获取关键点与描述子
    int num = sift.GetFeatureNum();
    cout << "Feature number=" << num << endl;
    vector<float> descriptors(128 * num);
    vector<SiftGPU::SiftKeypoint> keys(num);
    //timer.restart();
    
    sift.GetFeatureVector(&keys[0], &descriptors[0]);
    //cout << "siftgpu::getFeatureVector() cost time=" << timer.elapsed() << endl;

    // 先用OpenCV读取一个图像,然后调用SiftGPU提取特征
    cv::Mat img = cv::imread("你的图片路径", 0);
    int width = img.cols;
    int height = img.rows;
    //timer.restart();
    // 注意我们处理的是灰度图,故照如下设置

    unsigned int GL_INTENSITY8 = 0x804B;
    unsigned int GL_UNSIGNED_BYTE = 0x1401;
    timeOneBegin = (double)clock() / CLOCKS_PER_SEC;
    sift.RunSIFT(width, height, img.data, GL_INTENSITY8, GL_UNSIGNED_BYTE);
    cout << "siftgpu::runSIFT() cost time=" << (double)clock() / CLOCKS_PER_SEC - timeOneBegin << endl;

    return 0;
}

我是直接在对应的方案下面新建一个TestSiftGPU项目,然后新建一个testMain.cpp文件,输入上面这些代码进行测试,记得项目要添加opencv的依赖,以及更改自己对应的文件路径。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,525评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,203评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,862评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,728评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,743评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,590评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,330评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,244评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,693评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,885评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,001评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,723评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,343评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,919评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,042评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,191评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,955评论 2 355

推荐阅读更多精彩内容