平台:win10 x64 +VS 2015专业版 +opencv-2.4.11 + gtk_-bundle_2.24.10_win32

参考博客:https://www.cnblogs.com/cql/archive/2013/05/23/3095749.html

区别:VS2015,opencv2.4.11, gtk_-bundle_2.24.10_win32版本不同,稍有差别

一、OPENSIFT编译运行

区别:Visual Studio 2015专业版的项目中稍作改动并编译通过。

1.1 VS 2015专业版配置VS项目

VS 2015专业版 +opencv-2.4.11下载及安装见我的另一篇博客:https://www.cnblogs.com/Alliswell-WP/p/VS2015_OpenCV.html

那篇博客安装的是opencv-3.4.1-vc14_vc15  ,而本平台需要安装opencv-2.4.11  (那篇博客附有云盘下载链接),安装方法雷同,

注意:添加环境变量哦

首先解压OPENSIFT.zip ->里边有(“说明.txt”—说明了目录下各个文件,“SIFT程序vs”—为VS2012项目版本,对源码进行部分修改注释,“robwhess-opensift-300bad1.zip”—

从http://robwhess.github.io/opensift/下载的OpenSIFT源码)->将“SIFT程序vs”文件夹重命名为“SIFT”,然后拷贝到VS的工程文件夹下(我的是:“D:\Working\VS2015Projects”文件夹下)

->进入SIFT文件夹后用VS2015打开SIFT.vcxproj -> 默认模板解决方案平台选择是:Debug和解决方案配置选择是:Win32,

这时直接点击本地Windows调试器会有一大堆错误,还需要进行下面的配置。

1.2 OpenCV配置

下载链接:https://pan.baidu.com/s/12_DTxM265ZYmg5EBeacjNQ 密码:kbl3
下载后为:opencv-2.4.11.exe

安装:双击该可执行文件后更改路径(我的是:D:\ProgramFiles\opencv2)后点击“Extract”即可完成安装

配置:1.添加环境变量(我的为:D:\ProgramFiles\opencv2\opencv\build\x86\vc12\bin)

注意入坑1:环境变量要配置为x86的,而不能是x64的,这和vs2015平台选择的win32统一

2.VS2015中opencv的配置:在SIFT处单击鼠标右键,在弹出的快捷菜单中选择“属性”选项,进入SIFT的属性页

->(默认)配置处选择:Debug,平台选择:活动(Win32)

在“配置属性”点击“VC++目录“->“包含目录”点击编辑->在“包含目录”的对话框中将OpenCV的头文件路径(一共三个,在build文件夹下)添加进去->点击“确定“

  我的是:1.D:\ProgramFiles\opencv2\opencv\build\include  2.D:\ProgramFiles\opencv2\opencv\build\include\opencv  3.D:\ProgramFiles\opencv2\opencv\build\include\opencv2

  >“库目录”点击编辑->在“库目录”的对话框中将静态链接库路径(在\build\x64或者x86文件夹所在的路径,这和vs2015平台选择的win32统一,选择x86)

  我的是:D:\ProgramFiles\opencv2\opencv\build\x86\vc12\lib添加进去->点击“确定“

在“配置属性”点击“链接器“->点击“输入”->-> 在“附加依赖项”点击编辑->把lib库的名称(lib库文件在\build\x86\vc14\lib下)添加进去->点击“确定“->点击“确定“

Debug配置下:
opencv_calib3d2411d.lib;opencv_contrib2411d.lib;opencv_core2411d.lib;opencv_features2d2411d.lib;opencv_flann2411d.lib;opencv_gpu2411d.lib;
opencv_highgui2411d.lib;opencv_imgproc2411d.lib;opencv_legacy2411d.lib;opencv_ml2411d.lib;opencv_objdetect2411d.lib;opencv_ts2411d.lib;opencv_video2411d.lib;

Release配置下(先不用配置):

opencv_contrib2411.lib;opencv_core2411.lib;opencv_features2d2411.lib;opencv_flann2411.lib;opencv_gpu2411.lib;opencv_highgui2411.lib;opencv_imgproc2411.lib;
opencv_legacy2411.lib;opencv_ml2411.lib;opencv_objdetect2411.lib;opencv_ts2411.lib;opencv_video2411.lib;

注意入坑2:本平台需要安装opencv 2.x ,不能安装opencv 3.x,因为依赖库有问题,opencv3.x集成为一个了

注意入坑3:系统环境变量opencv只能配置一个(我的为:D:\ProgramFiles\opencv2\opencv\build\x86\vc12\bin),如果有opencv3.x或者opencv 2.x的x64的都会在VS中运行出错

如D:\ProgramFiles\opencv2\opencv\build\x86\vc12\bin和D:\ProgramFiles\opencv2\opencv\build\x64\vc12\bin就会报错:应用程序无法启动0xc000007b

1.3 GTK+配置
下载:http://ftp.gnome.org/pub/gnome/binaries/win32/gtk+/

我下载了2.24.10版本,下载后文件为:gtk_-bundle_2.24.10-20120208_win32.zip

 注意入坑4:官网下载:https://www.gtk.org/download/windows.php,  没有All-in-one bundle 版本,而要求下载msys2-x86_64-20180531.exe

而MSYS2 (Minimal SYStem 2) 是一个MSYS的独立改写版本,主要用于 shell 命令行开发环境。同时它也是一个在Cygwin (POSIX 兼容性层) 和

MinGW-w64(从”MinGW-生成”)基础上产生的,追求更好的互操作性的 Windows 软件。

解压至->->D:\ProgramFiles,并将文件夹重命名为:gtk_-bundle_2.24.10_win32  (简洁点,方便添加环境变量和库)

配置:1.添加环境变量(我的为:D:\ProgramFiles\gtk_-bundle_2.24.10_win32\bin)

->->按说明验证,Win+R输入cmd运行,在cmd中输入“pkg-config --cflags gtk+-2.0” ,会有一些输出,输入 “gtk-demo” ,会出现一个示例,演示GTK+的一些功能控件。

->->接下来就跟OpenCV一样,要在VS2012的项目中进行一番配置了。在CMD中输入运行“pkg-config --cflags --libs gtk+-2.0”,可以看到需要包含的目录和链接库。

  可以将这些输出导入txt文件中,运行“pkg-config --cflags --libs gtk+-2.0 > D:\ProgramFiles\gtk_-bundle_2.24.10_win32\gtk.txt”,打开D:\ProgramFiles\gtk_-bundle_2.24.10_win32\gtk.txt,

内容如下:-mms-bitfields -ID:/ProgramFiles/gtk_-bundle_2.24.10_win32/include/gtk-2.0

-ID:/ProgramFiles/gtk_-bundle_2.24.10_win32/lib/gtk-2.0/include -ID:/ProgramFiles/gtk_-bundle_2.24.10_win32/include/atk-1.0 -I

D:/ProgramFiles/gtk_-bundle_2.24.10_win32/include/cairo -ID:/ProgramFiles/gtk_-bundle_2.24.10_win32/include/gdk-pixbuf-2.0 -I

D:/ProgramFiles/gtk_-bundle_2.24.10_win32/include/pango-1.0 -ID:/ProgramFiles/gtk_-bundle_2.24.10_win32/include/glib-2.0 -I

D:/ProgramFiles/gtk_-bundle_2.24.10_win32/lib/glib-2.0/include -ID:/ProgramFiles/gtk_-bundle_2.24.10_win32/include -I

D:/ProgramFiles/gtk_-bundle_2.24.10_win32/include/freetype2 -ID:/ProgramFiles/gtk_-bundle_2.24.10_win32/include/libpng14

-LD:/ProgramFiles/gtk_-bundle_2.24.10_win32/lib -lgtk-win32-2.0 -lgdk-win32-2.0 -latk-1.0 -lgio-2.0 -lpangowin32-1.0 -lgdi32 -l

pangocairo-1.0 -lgdk_pixbuf-2.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lglib-2.0 -lintl

然后根据这个来添加配置。在VS项目属性的“VC++目录”->“包含目录”中添加/GTK/include/gtk-2.0 到 /GTK/include/libpng14的这些路径,注意要用带盘符的完整路径,那个-mms-bitfields不用管它。

-L后面的D:/ProgramFiles/gtk_-bundle_2.24.10_win32/lib要添加在“库目录”中。

再后面的-l是链接库的名字,把这一串”gtk-win32-2.0.lib;gdk-win32-2.0.lib;atk-1.0.lib;gio-2.0.lib;pangowin32-1.0.lib;gdi32.lib;pangocairo-1.0.lib;gdk_pixbuf-2.0.lib;

pango-1.0.lib;cairo.lib;gobject-2.0.lib;gmodule-2.0.lib;gthread-2.0.lib;glib-2.0.lib;intl.lib;”添加进配置属性->链接器->输入->”附加依赖项“ 中就行了。

注意入坑5:报错gdk_screen_get_width被display_big_img调用,原因:直接复制D:/ProgramFiles/gtk_-bundle_2.24.10_win32/include/gtk-2.0错误,因为里边是“/”,而win系统下路径是"\"

  所以,“包含目录”“库目录”下的路径都是"\"

注意入坑6:只能下载win32的,而不能是win64的,这和vs2015平台选择的win32统一

GTK+ win64的下载链接http://ftp.gnome.org/pub/gnome/binaries/win64/gtk+/2.22/

注意入坑7:报错找不到gdk.h或gtk.h>,原因:直接复制D:/ProgramFiles/gtk_-bundle_2.24.10_win32/include/gtk-2.0错误,因为里边是“/”,而win系统下路径是"\"

  所以,“包含目录”“库目录”下的路径都是"\",

而和utils.c下#include <gdk/gdk.h>和#include <gtk/gtk.h>无关,改成#include <gtk-2.0/gdk/gdk.h>和#include <gtk-2.0/gtk/gtk.h>错误依旧

1.4代码修改

  1.报错:“M_PI”未声明:发生在imgfeatures.c中。

  解决方案:在imgfeatures.h中加入 #define M_PI        3.14159265358979323846

  2.报错:无法找到头文件dirent.h。

  解决方案:在网上百度搜索:dirent.h - dirent API for Microsoft Visual Studio,然后下载文件,我是在码云上下载的(链接:https://gitee.com/lomox/beanstalkd-win/blob/master/dirent.h,

  解压后进入文件夹拷贝dirent.h),放在include文件夹(我的是:D:\Working\VS2015Projects\SIFT\include)下

  3.运行本地windows调试器后报错:无法启动应用程序,因为计算机中丢失msvcp120d.dll,关闭sift.exe后返回值为 -1073741515 (0xc0000135) '未找到依赖 dll'。

  原因:微软的Visual Studio最终用户许可协议是禁止发布调试版(名字后面有D)的DLL的,msvcp120d.dll和msvcr120d.dll是VS2013版本中的调试库文件,存在于路径:

  “\Microsoft Visual Studio 12.0\VC\redist\x86\Microsoft.VC120.CRT”中,VS2015版中只有msvcp140d.dll和msvcr140d.dll,但是OpenCV2.4.xx用的库版本最高为VC12,

  该库并没有升级VC14,我们需要用到VS2013的调试库文件,所以会造成msvcp120d.dll和msvcr120d.dll的缺失。

  解决方案:网上的方法是下载msvcp120d.dll和msvcr120d.dll到系统路径:C:\Windows\System32或C:\Windows\SysWOW64。但是我认为这样做不可取,随意添加到系统路径中容易与

  其他软件的安装发生冲突。我们可以将其放到OpenCV库路径中:“\OpenCV\opencv\build\x86\vc12\bin”。这样当我们不使用opencv时也不会调用这两个库文件,比较安全。
  下载链接:链接:https://pan.baidu.com/s/1nvN3atF 密码:11ak

  我下载的为:msvcp120d%E7%AD%89.rar,解压后拷贝至“\opencv\build\x86\vc12\bin”目录(我的是:D:\ProgramFiles\opencv2\opencv\build\x86\vc12\bin)下   ,重新运行本地windows调试器

结合OPENSIFT源码详解SIFT算法的更多相关文章

  1. 数据结构与算法系列2 线性表 使用java实现动态数组+ArrayList源码详解

    数据结构与算法系列2 线性表 使用java实现动态数组+ArrayList源码详解 对数组有不了解的可以先看看我的另一篇文章,那篇文章对数组有很多详细的解析,而本篇文章则着重讲动态数组,另一篇文章链接 ...

  2. 条件随机场之CRF++源码详解-预测

    这篇文章主要讲解CRF++实现预测的过程,预测的算法以及代码实现相对来说比较简单,所以这篇文章理解起来也会比上一篇条件随机场训练的内容要容易. 预测 上一篇条件随机场训练的源码详解中,有一个地方并没有 ...

  3. Activiti架构分析及源码详解

    目录 Activiti架构分析及源码详解 引言 一.Activiti设计解析-架构&领域模型 1.1 架构 1.2 领域模型 二.Activiti设计解析-PVM执行树 2.1 核心理念 2. ...

  4. [转]【视觉 SLAM-2】 视觉SLAM- ORB 源码详解 2

    转载地址:https://blog.csdn.net/kyjl888/article/details/72942209 1 ORB-SLAM2源码详解 by 吴博 2 https://github.c ...

  5. RocketMQ源码详解 | Producer篇 · 其二:消息组成、发送链路

    概述 在上一节 RocketMQ源码详解 | Producer篇 · 其一:Start,然后 Send 一条消息 中,我们了解了 Producer 在发送消息的流程.这次我们再来具体下看消息的构成与其 ...

  6. RocketMQ源码详解 | Broker篇 · 其一:线程模型与接收链路

    概述 在上一节 RocketMQ源码详解 | Producer篇 · 其二:消息组成.发送链路 中,我们终于将消息发送出了 Producer,在短暂的 tcp 握手后,很快它就会进入目的 Broker ...

  7. RocketMQ源码详解 | Broker篇 · 其五:高可用之主从架构

    概述 对于一个消息中间件来讲,高可用功能是极其重要的,RocketMQ 当然也具有其对应的高可用方案. 在 RocketMQ 中,有主从架构和 Dledger 两种高可用方案: 第一种通过主 Brok ...

  8. Spark Streaming揭秘 Day25 StreamingContext和JobScheduler启动源码详解

    Spark Streaming揭秘 Day25 StreamingContext和JobScheduler启动源码详解 今天主要理一下StreamingContext的启动过程,其中最为重要的就是Jo ...

  9. spring事务详解(三)源码详解

    系列目录 spring事务详解(一)初探事务 spring事务详解(二)简单样例 spring事务详解(三)源码详解 spring事务详解(四)测试验证 spring事务详解(五)总结提高 一.引子 ...

随机推荐

  1. 5、Zookeeper命令操作

    一.Zookeeper的四字命令 Zookeeper支持某些特定的四字命令字母与其的交互.他们大多数是查询命令,用来获取Zookeeper服务的当前状态及相关信息.用户在客户端可以通过telnet或n ...

  2. Problem B: 取石子

    转换成一个数在(0,X + Y)的加减问题 考虑一种使用线段树处理的方法, 维护前缀最大值, 前缀最小值, 前缀和, 然后查询的时候先询问右区间是否会同时碰到上下界, 会的话左区间无用直接递归右区间, ...

  3. redis消息通知(任务队列/优先级队列/发布订阅模式)

    1.任务队列 对于发送邮件或者是复杂计算这样的操作,常常需要比较长的时间,为了不影响web应用的正常使用,避免页面显示被阻塞,常常会将此类任务存入任务队列交由专门的进程去处理. 队列最基础的方法如下: ...

  4. 实战ELK(4)Metricbeat 轻量型指标采集器

    一.介绍 用于从系统和服务收集指标.从 CPU 到内存,从 Redis 到 Nginx,Metricbeat 能够以一种轻量型的方式,输送各种系统和服务统计数据. 1.系统级监控,更简洁(轻量型指标采 ...

  5. python3基础: 元组tuple、 列表list、 字典dict、集合set。 迭代器、生成器

    一.元组: tuple Python 的元组与列表类似,不同之处在于元组的元素不能修改. 元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组 tup2 = (111, 22, 33, ...

  6. git保存用户名和密码

    git保存用户名和密码 简介:tortoiseGit(乌龟git)图形化了git,我们用起来很方便,但是我们拉取私有项目的时候,每次都要输入用户名和密码很麻烦,这里向大家介绍怎么避免多少输入 试验环境 ...

  7. Java语法 [常识1]

    1. Java 语言采用的是双字节Unicode 编码 . 2. 标识符就是变量.常量.方法[函数].枚举.类.接口等由写代码的猴子们制定的名字.构成标识符的字母均有一定的规范,Java语言中的命名规 ...

  8. (转)Detect it Easy(壳侦测工具)使用方法介绍

    http://www.ucbug.com/jiaocheng/129805.html Detect it Easy是一个多功能的PE-DIY工具,主要用于壳侦测.功能正日益完善,是不可多得的破解利器! ...

  9. 如何利用sql 读取辅表的最大max 和第二最大max。。。。

    SELECT `主表`.id, `主表`.title, `辅表`.* FROM tableB AS `辅表` INNER JOIN tableA AS `主表` ON `主表`.id = `辅表`.f ...

  10. NodeJs学习相关网址

    node官方中文 https://nodejs.org/zh-cn/   Node.js 中文网 https://nodejs.org/zh-cn/   Node.js 教程 | 菜鸟教程 http: ...