在很多情况下,学习一个已经存在的东西时候,拿别人的代码过来学习是一个很好的东西。。我今天就来讲讲我调用feature2d 中遇到的问题以及解决方法。
下面贴出我的错误以及配置
——————————————————————配置 VS2010 OPENCV 2.4.6————————————————————————————————————
.LOG
错误信息
fast.obj : error LNK2001: unresolved external symbol "void __cdecl cv::FAST(class cv::_InputArray const &,class std::vector<class cv::KeyPoint,class std::allocator<class cv::KeyPoint> > &,int,bool)" (?FAST@cv@@YAXABV_InputArray@1@AAV?$vector@VKeyPoint@cv@@V?$allocator@VKeyPoint@cv@@@std@@@std@@H_N@Z)
源程序包含的库
cxcore210.lib
cv210.lib
highgui210.lib
cvaux210.lib
ml210.lib
cxts210.lib
现在程序包含的库
C:\opencv\build\x86\vc10\lib\opencv_core246.lib;C:\opencv\build\x86\vc10\lib\opencv_highgui246.lib;C:\opencv\build\x86\vc10\lib\opencv_video246.lib;C:\opencv\build\x86\vc10\lib\opencv_ml246.lib;C:\opencv\build\x86\vc10\lib\opencv_legacy246.lib;C:\opencv\build\x86\vc10\lib\opencv_imgproc246.lib;%(AdditionalDependencies)
12:37 2013/11/7
-------------------------------------------------------------------------------------------------------分割线————————————————————————————
这种错误的查找我是费了些功夫的,原来 编程的经验告诉我问题出现在project-》属性-》link-》input中包含的库里。。
接着我仔细查看了出错的函数FAST();它的函数原型在feature2d.hpp中做了说明
C:\opencv\build\include\opencv2\features2d\feature2d.hpp
//! detects corners using FAST algorithm by E. Rosten
CV_EXPORTS void FAST( InputArray image, CV_OUT vector<KeyPoint>& keypoints,
int threshold, bool nonmaxSupression=true );
CV_EXPORTS void FASTX( InputArray image, CV_OUT vector<KeyPoint>& keypoints,
int threshold, bool nonmaxSupression, int type );
同时我在网上搜到了下面的博客http://blog.csdn.net/skeeee/article/details/9366797,虽然还没有进行验证,但是发现2.4.6的版本和2.4.5的版本略有区别,以前属于nofree中的一些函数,在新的版本中变成了free。就是只要包含opencv2\feature2d\feature2d.hpp不用去找一个nofree的文件夹。
后面回到这个link错误的本身上来,是忘了在文件中包含调用这个函数的库 opencv_feature2d246.lib 接着我将这个库加入了我link-》input中,然后重新运行编译 成功。。
最后我贴出我一般常用的文件库的配置信息 ,这个也就是最基本的信息,vs2010需要每次的新工程都要重新配置,为了方便,我已经把它作为一个文件,以便每次打开进行复制就好了,就不用每次打开找复杂的路径了。
include
$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSdkDir)include;$(FrameworkSDKDir)\include;C:\opencv\include\opencv;C:\opencv\include\opencv2;C:\opencv\include;C:\opencv\build\include\opencv;C:\opencv\build\include\opencv2;C:\opencv\build\include
lib
$(VCInstallDir)lib;$(VCInstallDir)atlmfc\lib;$(WindowsSdkDir)lib;$(FrameworkSDKDir)\lib;C:\opencv\build\x86\vc10\lib
link input
C:\opencv\build\x86\vc10\lib\opencv_core246.lib;C:\opencv\build\x86\vc10\lib\opencv_highgui246.lib;C:\opencv\build\x86\vc10\lib\opencv_video246.lib;C:\opencv\build\x86\vc10\lib\opencv_ml246.lib;C:\opencv\build\x86\vc10\lib\opencv_legacy246.lib;C:\opencv\build\x86\vc10\lib\opencv_imgproc246.lib;%(AdditionalDependencies)