OpenCV使用之-----BruteForceMatcher報錯“無法識別的標識符”
最近Opencv升級比較快,從2.4.0到2.4.1到2.4.2,使得我這個還在使用2.3.1的人很不好意思,而且聽說新版本里添加了tbb并行功能,急著想用這些功能的我趕緊下了2.4.2。
按部就班的解壓、設置c++目錄(我使用的是vs2008)、設置環境變量......一系列的完成之后,想用一下surf算法,就嘗試著把pdf文檔里的代碼復制到了vs里,運行一下,發現不行,報錯。。。瞬間有點被騙的感覺,這可是從官方發布的pdf里的最新代碼啊!!!
#include
#include "opencv2/core/core.hpp"
#include "opencv2/features2d/features2d.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/nonfree/nonfree.hpp"
#include "opencv2/nonfree/features2d.hpp"
using namespace std;
using namespace cv;
char *path1="D:\\TestData\\cvtest\\src\\left01.jpg";
char *path2="D:\\TestData\\cvtest\\src\\left03.jpg";
int main()
{
Mat src1=imread(path1,0);
/*namedWindow("image",CV_WINDOW_AUTOSIZE);
imshow("image", src1);
waitKey(0);*/
Mat src2=imread(path2,0);
SurfFeatureDetector detector(400);
vector
detector.detect(src1,keypoint1);
detector.detect(src2,keypoint2);
SurfDescriptorExtractor extractor;
Mat descriptor1,descriptor2;
extractor.compute(src1,keypoint1,descriptor1);
extractor.compute(src2,keypoint2,descriptor2);
BruteForceMatcher
vector
matcher.match(descriptor1,descriptor2,matches);
namedWindow("matches",1);
Mat img_matches;
drawMatches(src1,keypoint1,src2,keypoint2,matches,img_matches);
imshow("matches",img_matches);
cvWaitKey(0);
return 0;
}
但是新的問題出來了,說link出現問題,沒經驗的我還是只能問google(谷歌確實強大啊!!!),牛人一針見血的指出了問題所在:For those who would have the same problem, make sure you have ALL the right linker inputs (configuration -> linker -> inputs), included dlls such as opencv, highgui etc.在右鍵“屬性”->"鏈接器"->“輸入”->"附加依賴項"把新輸入的legacy的靜態文件opencv_legacy242d.lib加進來就ok了!
遇到的問題及解決:
1、大量的.dll文件(如msvcr100d.dll)未加載,這個可能是一些包含的相關的.dll文件的路徑沒加入到PATH中,可以找到位置后加入PATH,或者在工程調試選項中 設置對 源服務器的支持 與 microsoft符號服務器 的支持(需聯網)。
2、參考 http://www.cnblogs.com/ll2008swu/archive/2012/07/23/2605639.html 在做2維特征提取時,發現SurfFeatureDetector并不在opencv2/features2d/features2d.hpp?而是在opencv2/nonfree/features2d.hpp
BruteForceMatcher ?需加入opencv2/nonfree/features2d.hpp
包含上面文件最終還需加入 opencv2/legacy/legacy.hpp
//同時為正常link,須Linker下加入-lopencv_nonfree240(不然會出現error LNK2019: 無法解析的外部符號的問題)。
使用VC者依版本將opencv_nonfree242d.lib所在位置加入Linker路徑設定中即可順利執行
OpenCV
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。