在windows下编译d_nets费了我将近一周的课余时间。期间问题数不胜数,今天终于成功。
编译d_nets需要安装了opencv的vs,当然也可以自己cmake一下opencv。我是在vs2010上配置opencv各种参数。
(1)opencv2.4.1 不支持SIFT
首先我安装的是opencv2.4.1版本,vs2010配置各种路径后,cv::SIFT::等一系列函数均不识别。刚开始接触opencv,最开始一直没找到报错的原因。百度了好久发现,opencv2.4.1版本已经把sift surf这两个更为nofree了,换句话说,opencv2.4.1是不支持sift系列函数的%>_<% 。opencv2.3及以前系列都可以用。
(2)vs2010+opencv2.3.1
1、配置时,link error, 找不到opencv_core231.dll,百度之,把所有dll全改为……d.dll。opencv_core231.dll是release版本,opencv_core231d.dll是debug版本。
什么是debug 和release版本?Debug 和 Release 编译方式的本质区别 Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。
2、imread(filename,1)读不进图片?这个也是把所有的dll都换成debug版本。路径用相对路径,复制过去的,没有错。后来我还是没读进去图片,放弃之。
(3)vs2010+opencv2.2(for vs2010)
opencv这个版本是专门为vs2010设置的。以上我的血泪史以及csdn上各种问题表明,opencv其他版本和vs2010配合很不好,总会出现这样那样的错误。
1、M_PI不识别?报错是没有设置这个变量。我在头文件里加了cmath依然无果,只好自己define。
2、imread(filename,1)读不进图片?这里我用的是相对路径 /images/img1.pgm ,错误出现了,这是我过了好久才发现的,应该是\images\img.pgm,顿觉自己脑残无比。
3、F5调试时,命令窗口一闪而过?在程序main函数 return 0 之前加入 system("pause").ok。
3、ctrl+F5后,命令窗口一闪而过? 在vs下 , 项目->属性->链接器->系统->子系统, 选择 控制台(/SUBSYSTEM/CONSOLE)这一项,ok,问题解决。
(4)vs2010输入命令行参数?
我是在项目 项目属性 参数 里输的参数,没有问题。但觉得太麻烦,于是在该工程的debug文件夹里,新建一个a.txt,并输入CMD.更名为a.dat。
1、dat文件运行时一闪而过? 计算机->属性->高级系统设置->环境变量->在系统变量 PATH里加入 C:\Windows\System32 ;bat文件就可以正常运行了。
最后,在a.bat里输入 d_nets images\img1.pgm s=0.5 images\img2.pgm s=0.5 运行成功。
d_nets程序使用SIFT取的兴趣点。而SIFT是根据图像的灰度对图像进行高斯模糊来取点, 所以程序在处理模糊图像匹配时,效果很差,几乎没有strips。