平台: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. git一个分布式版本工具的使用

    1.git和cvs的区别 分支更快,更容易 支持离线工作,本地提交可以稍后提交到服务器上 git提交是原子的,且是整个项目范围的,而不像cvs是对每个文件 git中的每个工作树都包含一个具有完整项目历 ...

  2. 常用HDFS操作命令

    前一段时间频繁使用HDFS,又收集到了一些命令,在这儿分享出来,大数据的框架及设计原理方面的理论文章暂时还没有时间总结,后面有时间逐渐整理发出来. 注:在使用命令时,可以使用 hadoop fs,如果 ...

  3. Java 基础测试题

    一.选择题 1.下面哪些是合法的变量名? ( DEG  ) A.2variable B. .variable2 C. ._whatavariable D._3_ E.$anothervar F.#my ...

  4. Spring MVC @SessionAttributes注解

    @SessionAttributes原理 默认情况下Spring MVC将模型中的数据存储到request域中.当一个请求结束后,数据就失效了.如果要跨页面使用.那么需要使用到session.而@Se ...

  5. python学习笔记_week27

    search import time import random def cal_time(func): def wrapper(*args, **kwargs): t1 = time.time() ...

  6. 移动端UL列表无法平滑向下滚动问题

    问题说明: 移动端向上滑动后,,列表无法自动滚动到底部~~而是类似屏幕"沾手"的效果(手离开屏幕直接停止在当前~列表不会自动向下滚动一段) 问题原因: 页面中存在如下代码: 当前页 ...

  7. Springboot 热部署问题。亲测可用。

    本人开发使用的是Mac系统,windows应该类似.主要是 spring-boot-devtools的使用 参考:mac下的idea设置,是不是有疑问,既然别人写好了,为啥你还要再来一次,因为我使用了 ...

  8. idhttp.post方式 调用datasnap rest 远程方法(转咏南兄)

    idhttp.get方式调用,这种比较简单,大家都会.post方式网上却没有任何成功的代码,本人也是摸索了一个上午才搞定. 分享给大家. (1)post方式调用的远程方法,方法名必须加“update” ...

  9. Linux命令:unlias

    语法 unalias [-a] name [name ...] 说明 取消别名. 可以一次取消多个别名,写几个取消几个.不写,取消所有别名. 参数 -a 取消所有别名,不论后面是否跟一个还是多个nam ...

  10. K8s部署使用CFSSL创建证书

    证书的编码格式 PEM(Privacy Enhanced Mail),通常用于数字证书认证机构(Certificate Authorities,CA),扩展名为.pem, .crt, .cer, 和  ...