2014-05-13 30 views
7

我試圖運行檢測圖像的特徵的應用程序,但是當我運行的代碼BRISK功能,BRIEF描述符和FlannBased匹配,它崩潰並說:OpenCV的:弗萊恩匹配崩潰

OpenCV Error: Unsupported format or combination of formats (type=0 
) in buildIndex_, file /home/stefan/git_repos/opencv/modules/flann/src/miniflann.cpp, line 315 
terminate called after throwing an instance of 'cv::Exception' 
    what(): /home/stefan/git_repos/opencv/modules/flann/src/miniflann.cpp:315: error: (-210) type=0 
in function buildIndex_ 

Aborted (core dumped) 

任何想法爲什麼?

+0

您是否嘗試清潔並重新啓動計算機?來源:http://stackoverflow.com/questions/11860875/opencv-error-when-using-miniflann –

+0

是的,但沒有變化,相同的錯誤,它需要flann的64個描述符值?或者該類型應該是int,float還是flanen的double?我有一些我現在想要修復的固定值(32和CV_8U) –

回答

9

也許你試過使用KD-Tree或KMeans?它們僅適用於像SIFT或SURF這樣的CV_32F描述符。 對於像BRIEF \ ORB \ FREAK這樣的二進制描述符,您必須使用LSH或Hierarchical集羣索引。或簡單的暴力搜索。 您可以自動管理它,例如像這樣。

cv::flann::Index GenFLANNIndex(cv::Mat keys) 
{ 
    switch (keys.type()) 
    { 
    case CV_32F: 
     { 
     return cv::flann::Index(keys,cv::flann::KDTreeIndexParams(4)); 
     break; 
     } 
    case CV_8U: 
     { 
     return cv::flann::Index(keys,cv::flann::HierarchicalClusteringIndexParams(),dist_type); 
     break; 
     } 
    default: 
     { 
     return cv::flann::Index(keys,cv::flann::KDTreeIndexParams(4)); 
     break; 
     } 
    } 

} 
... 
cv::flann::Index tree = GenFLANNIndex(descriptors); 
+0

我沒有特殊線條,我對所有描述符(特徵類型)都是一樣的,就是SIFT和SURF描述符,KD-Tree上的特徵。兩者的默認值是否與其他值不同? –

+0

是的,你是對的,類型是CV_32F我將修復這個問題 –

+0

由於二進制描述符的性質不同,你必須對它們使用不同的匹配方法,問題不僅僅是CV_32F。 –