您的位置:首页 > 其它

SIFT经典算法调试心得

2012-03-14 15:47 441 查看
调了一天,终于只剩下警告了(可能是因为基础差吧),可以出运行预想的结果了。眼睛都快睁不开了,终于体会到程序员的不易了。不过我还是不能和人家程序员相提并论的。每一步都是自己搞出来的,虽然有些问题可能本来只是很水的,可是对于不懂的人来说,一一攻克还是有点成就感的。

程序是从师姐那里拷来的,详细的出处据说在这里http://download.csdn.net/source/1352136可以下得到,程序中不仅用到了图像处理的OpenCV,还用到了科学计算库GSL,GSLhttp://download.csdn.net/source/1352070可以在这里下。这两种工具都是要进行相关设置才可以使用的。可能程序本来是在VC6.0环境下写的吧,反正拿到VS2008中什么都没做,编译时就产生100多个错误,而且还由于错误多于100停止编译,还好我胆大,要不早都被它们吓到了。

先说OpenCV 的设置,其实这些也都是共享来的,只是总结在这里便于系统参考。

http://blog.163.com/shuangchenyue_8/blog/static/3995436620099286133964

然后是GSL的设置,这个要麻烦的多。虽然设置就那么几步,但总是会出问题。不过这里出现的问题都是链接时候出现的问题,按照下面这个设置好了,先解决编译的问题吧。

http://blog.163.com/shuangchenyue_8/blog/static/3995436620099286847735

出现问题最多的可能是mathch.c了吧。因为它里面用到了#include<iostream.h>,大家都知道,在VS2008里是不允许这样的写法,很自然我想到了把它改为#include<iostream>,using namespace std; 这样老错误是解决了,但又出现新问题了。还以为是那句#include<stdio.h>有问题呢,改了很多表达方法都没有用,后来才找到一个比较奏效的解释,原来使用#include<iostream>,using namespace std; 这样的表达一定要在C++文件中才可以,而程序里所有原文件都是.c文件。终于有收获了,将那个.c文件改为了.cpp文件。这个问题一解决,好像编译就可以通过了,除了类型转换的一些警告外。

接着就是链接的错误,这个问题把我搞得都晕死了。网上虽然出现同类错误的很多,但只是出错代码一样,都是error LNK2019: 无法解析的外部符号,接着是一大堆函数然后说在_main中被引用。后面的具体情况还都是不同的。看了很多,还是不怎么摸得着头绪。不过其中看了一篇是关于extern的,当时那篇讲很有点深奥,也没静下心来看。后来实在找不到办法,都快没信心了。仔细研究了下错误,发现都是和头文件中的extern函数有关的。于是就朝着这个方向又仔细地查了下,才搞定了。原来是在C++中用C文件中的extern声明的函数或变量,必须要加上这个extern
"c"{# include "****.h"},包含的那个头文件就是C文件中extern声明的函数或变量。这样终于只剩下警告了了。最后,运行的时候又出问题了,真是一路走来不容易呀。是什么.dll出错,其实这个就是在OpenCV安装的时候有一个自动添加环境变量,有时候安装的时候加不上,需要手动加上,按照上面提到那篇OpenCV设置中提到的设置就可以。在这个问题没解决的时候,在网上看到好多文章说因为是link问题,自然会想到库文件,还手动生成了什么动态、静态库,最后也不知道那些管没管用,反正最后改了extern的那个,问题就解决了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: