2014-05-13 23 views
7

próbuję uruchomić aplikację, która wykrywa funkcje w obrazie, ale gdy uruchamiam kod BRISK funkcji, BRIEF opisowych i FlannBased dopasowującego, zawiesi i mówiąc:OpenCV: Flann dopasowujący wywala

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) 

Jakieś pomysły, dlaczego?

+0

Czy próbowałeś wyczyścić i ponownie uruchomić komputer? źródło: http://stackoverflow.com/questions/11860875/opencv-error-when-using-miniflann –

+0

Tak, ale bez zmian, ten sam błąd, czy potrzeba 64 wartości deskryptorów dla flann? Lub typ powinien być int, float lub podwójny dla flann? Mam kilka stałych wartości (32 i CV_8U), które chcę teraz naprawić –

Odpowiedz

9

Prawdopodobnie próbowałeś użyć KD-Tree lub KMeans? Działają tylko dla deskryptorów CV_32F, takich jak SIFT lub SURF. W przypadku deskryptorów binarnych, takich jak BRIEF \ ORB \ FREAK, należy użyć LSH lub hierarchicznego indeksu klastrowania. Lub proste wyszukiwanie bruteforce. Możesz zarządzać nią automatycznie, na przykład w ten sposób.

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

Nie mam żadnych specjalnych linii, robię to samo dla wszystkich deskryptorów, typów funkcji, to deskryptory SIFT i SURF, funkcje na KD-Tree. Czy domyślny dla dwóch różni się od pozostałych? –

+0

Tak, masz rację, typem jest CV_32F Naprawię to –

+0

Z powodu różnej natury binarnych deskryptorów, musisz użyć dla nich innej metody dopasowania, problem nie dotyczy tylko CV_32F. –

Powiązane problemy