参考博客:
http://www.itdaan.com/blog/2017/05/03/7a750043d825913166d53554ef40ec3a.html
SiftGPU使用的是wuchangchang版,稳定,精度高,匹配出的特征点多
下载地址:
https://github.com/pitzer/SiftGPU
这里我们插个嘴 关于glut glew区别
参考博客:https://www.cnblogs.com/gujianhan/p/3702050.html
GLEW是一个跨平台的C++扩展库,基于OpenGL图形接口。使用OpenGL的朋友都知道,window目前只支持OpenGL1.1的涵数,但 OpenGL现在都发展到2.0以上了,要使用这些OpenGL的高级特性,就必须下载最新的扩展,另外,不同的显卡公司,也会发布一些只有自家显卡才支 持的扩展函数,你要想用这数涵数,不得不去寻找最新的glext.h,有了GLEW扩展库,你就再也不用为找不到函数的接口而烦恼,因为GLEW能自动识 别你的平台所支持的全部OpenGL高级扩展涵数。也就是说,只要包含一个glew.h头文件,你就能使用gl,glu,glext,wgl,glx的全 部函数。GLEW支持目前流行的各种操作系统(including Windows, Linux, Mac OS X, FreeBSD, Irix, and Solaris)。
项目主页: http://glew.sourceforge.net/
文档地址: http://glew.sourceforge.net/install.html
下载地址: https://sourceforge.net/project/downloading.php?group_id=67586&filename=glew-1.5.1-src.zipglu是实用库,包含有43个函数,函数名的前缀为glu。Glu 为了减轻繁重的编程工作,封装了OpenGL函数,Glu函数通过调用核心库的函数,为开发者提供相对简单的用法,实现一些较为复杂的操作。
glaux是OpenGL辅助库,包含有31个函数,函数名前缀为aux。这部分函数提供窗口管理、输入输出处理以及绘制一些简单三维物体。
glut是实用工具库,基本上是用于做窗口界面的,并且是跨平台(所以有时你喜欢做简单的demo的话,可以光用glut就ok了)GLX:OpenGL extension for X.
对于X窗口系统,它所使用的的OpenGL扩展(GLX)是作为OpenGL的一个附件提供的,所有的GLX函数都使用前缀glX。
常见的OpenGL头文件如下:(Windows系统中可以忽略大小写的区别,我自己也没太注意大小写。同时,文件的路径可能变化,例如不是<GL/gl.h>而是"gl.h",具体情况要看你到底把头文件放到哪了)
<GL/gl.h>:OpenGL所使用的函数和常量声明。
<GL/glu.h>:GLU(OpenGL实用库)所使用的函数和常量声明。GLU库属于OpenGL标准的一部分。(以下各种库则不属于)
<GL/glaux.h>:GLAUX(OpenGL辅助库)所使用的函数和常量声明。这个库提供了创建窗口,处理键盘和鼠标事件,设置调色板等OpenGL本身不提供,但在编写OpenGL程序时又经常用到的功能。目前这个库已经过时,只有比较少的编译环境中有提供,例如VC系列。在VC系列编译器中,使用这个头文件之前必须使用#include <windows.h>或者具有类似功能的头文件。
<GL/glut.h>:GLUT(OpenGL实用工具包)所使用的函数和常量声明。这个库的功能大致与GLAUX类似,目前许多OpenGL教程使用这个库来编写演示程序。一些编译系统可能不直接提供这个库(例如VC系列),需要单独下载安装。这个头文件自动包含了<GL/gl.h>和<GL/glu.h>,编程时不必再次包含它们。
<GL/glext.h>:扩展头文件。因为微软公司对OpenGL的支持不太积极,VC系列编译器虽然有<GL/gl.h>这个头文件,但是里面只有OpenGL 1.1版本中所规定的内容,而没有OpenGL 1.2及其以后版本。对当前的计算机配置而言,几乎都支持OpenGL 1.4版本,更高的则到1.5, 2.0, 2.1,而VC无法直接使用这些功能。为了解决这一问题,就有了<GL/glext.h>头文件。这个头文件提供了高版本OpenGL所需要的各种常数声明以及函数指针声明。
<GL/wglext.h>:扩展头文件。与<GL/glext.h>类似,但这个头文件中只提供适用于Windows系统的各种OpenGL扩展所使用的函数和常量,不适用于其它操作系统。
"glee.h":GLEE开源库的头文件。它的出现是因为<GL/glext.h>虽然可以使用高版本的OpenGL函数,但是使用的形式不太方便。GLEE库则让高版本的OpenGL函数与其它OpenGL函数在使用上同样方便。需要注意的是,这个头文件与<GL/gl.h>是冲突的,在包含"glee.h"之前,不应该包含<GL/gl.h>。
#include <GL/glut.h>
#include "glee.h" // 错误,因为glut.h中含有gl.h,它与glee.h冲突
// 但是如果把两个include顺序交换,则正确
"glos.h":虽然这个也时常见到,但我也不知道它到底是什么,可能是与系统相关的各种功能,也可能只是自己编写的一个文件。我曾经看到一个glos.h头文件中只有一句#include <GL/glut.h>。
假设已经安装好cuda开发环境,我是用的是cuda v9.0
同时需要下载the OpenGL Extension wrangle library(glew)支撑库,
网址为:https://sourceforge.net/projects/glew/files/glew/
还需要下载glut支撑库,the OpenGL Utility Toolkit,网址为:https://www.opengl.org/resources/libraries/glut/glut_downloads.php
编译glew x64
下载以后解压
使用VS2013 打开 sln工程文件
把32位和64位都生成一遍
其中glewinfo 和 visualinfo 是测试程序,我们不需要
glew_shared生成的是动态库
glew_static生成的是静态库
把x64位的 Release 和 Debug的静态库整理下:
Debug的64位静态库
Release的64位静态库
头文件
末尾带s或直接标明static为静态版本
这里全部截图太墨迹了,我直接把我编译好的64位静态库动态库上传:
有需要的小伙伴在我的下载资源找一下
接着我们下载glut
如果你想使用直接编译好的下载这个:
里面有32位和64位
如果想使用window VS编译的版本
网址:
https://user.xmission.com/~nate/glut.html
这个打开后会有 sln的VS工程文件:
glut默认只给了动态库的版本,如果我们想要静态库还要改,偷懒了,只生成动态库吧
我们选择x64位的Debug和Release 分别生成
取出我们需要的:
然后和glew一样,别忘了把头文件取出:
老规矩,重新放到一个目录下,然后想glew一样,把debug的后面加上d,以示区分
为了让大家看的更明白
我们使用cmd的命令生成树状图
tree /f > tree.txt
还有一个图像处理库DevIL
这里我并没有编译,网上有他的64位Release版本
我也会上传到我的资源
DevIl Image library图像库
https://github.com/DentonW/DevIL
这个库需要:
Could NOT find ZLIB (missing: ZLIB_LIBRARY ZLIB_INCLUDE_DIR)
Could NOT find PNG (missing: PNG_LIBRARY PNG_PNG_INCLUDE_DIR)
Could NOT find TIFF (missing: TIFF_LIBRARY TIFF_INCLUDE_DIR)
Could NOT find JPEG (missing: JPEG_LIBRARY JPEG_INCLUDE_DIR)
Could NOT find JPEG (missing: JPEG_LIBRARY JPEG_INCLUDE_DIR)
Could NOT find Jasper (missing: JASPER_LIBRARIES JASPER_INCLUDE_DIR JPEG_LIBRARIES)
Could not find libSquish
Could NOT find LCMS2 (missing: LCMS2_LIBRARY LCMS2_INCLUDE_DIR)
如果一个一个编译的话,参考博文:
https://blog.csdn.net/github_35160620/article/details/60267890
等等,发现了新大陆
我找到了作者编译好的
https://sourceforge.net/projects/openil/files/
下载完成后,解压,进入SiftGPU\msvc\目录,用vs2015打开siftGPU.sln(编译openGL版本动态库),或者打开SiftGPU_CUDA_Enabled.sln(编译CUDA版本的动态库)。