本人很菜,也沒怎麼學習過C++,opencv程式運行時經常出錯,所以把問題和解決方案都記下來以免再犯。
OpenCV的feature2d module中提供了從局部映像特徵(Local image feature)的檢測、特徵向量(feature vector)的提取,到特徵匹配的實現。其中的局部映像特徵包括了常用的幾種局部映像特徵檢測與描述運算元,如FAST、SURF、SIFT、以及ORB。對於高維特徵向量之間的匹配,opencv主要有兩種方式:1)BruteForce窮舉法;2)FLANN近似K近鄰演算法(包含了多種高維特徵向量匹配的演算法,例如隨機森林等)。
feature2d module: http://docs.opencv.org/modules/features2d/doc/features2d.html
OpenCV FLANN: http://docs.opencv.org/modules/flann/doc/flann.html
FLANN: http://www.cs.ubc.ca/~mariusm/index.php/FLANN/FLANN
opencv特徵檢測和匹配程式運行常見錯誤及解決方案
1)使用特徵點檢測需要增加使用一下兩個標頭檔:
#include "opencv2/nonfree/nonfree.hpp"
#include "opencv2/legacy/legacy.hpp"
2)Vector容器使用時報錯:代碼中顯示缺少類模板“std::vector”的參數列表
解決方案:可以看標頭檔中類的定義,
正確使用:
std::vector<DMatch> matches;
std::vector<KeyPoint> queryKeypoints, trainKeypoints;
std::vector<vector<DMatch>> knnmatches;
initModule_nonfree();//報錯,標頭檔加#include "opencv2/nonfree/nonfree.hpp"解決
3)Error1error C1075: end of file found before the left brace '{' at 'd:\program files (x86)\opencv2_4_13\projectopencv2413\featuredetectedandmatch\feature2d\feature2d\source.cpp(27)' was matched
原因:缺少"}",是括弧不匹配的問題或某些特殊的逸出字元多寫了。
4)main函數的參數列表儲存了輸入參數的資訊,第一個參數argc記錄了輸入參數的個數,
第二個參數是字串數組的,字串數組的每個單元是char*類型的,指向一個c風格字串。
以notepad.exe example.txt為例
argc是2,就是說argv數組中有兩個有效單元
第一單元指向的字串是"notepad.exe"
第二單元指向的字串是"example.txt"
argv數組中的第一個單元指向的字串總是可執行程式的名字,以後的單元指向的字串依次是程式調用時的參數。
這個賦值過程是編譯器完成的,我們只需要讀出資料就可以了。
int main( int argc , char *argv[] , char *envp[] )
main()函數一般用int或者void形的。我比較喜歡用int型定義main。因為在結束的時候可以返回給作業系統一個值以表示執行情況。
int argc
這個東東用來表示你在命令列下輸入命令的時候,一共有多少個參數。比方說你的程式編譯後,可執行檔是test.exe
D:\tc2>test
這個時候,argc的值是1
但是 <