2014-05-13 79 views
2

爲什麼SIFT和SURF探測器會墜毀?OpenCV:爲什麼SIFT和SURF探測器崩潰?

using namespace std; 
using namespace cv; 

int main(int argc, char *argv[]) 
{   
    Mat image = imread("TestImage.jpg"); 

    // Create smart pointer for SIFT feature detector. 
    Ptr<FeatureDetector> featureDetector = FeatureDetector::create("SIFT"); 
    vector<KeyPoint> keypoints; 

    // Detect the keypoints 
    featureDetector->detect(image, keypoints); // here crash 
    // ... 
} 

錯誤是Segmentation fault (core dumped)。我使用OpenCV 2.4.8,gcc 4.9和Ubuntu。如果我使用其他類型的功能它正常運行。我錯過了什麼?

+0

你確定*圖像有效嗎? –

+0

它需要在灰度上嗎? –

+0

我不知道 - 檢查文檔 - 我指的是,雖然沒有錯誤檢查是否已成功加載「image」。 –

回答

10

您是否嘗試致電initModule_nonfree()

#include <opencv2/nonfree/nonfree.hpp> 
using namespace std; 
using namespace cv; 

int main(int argc, char *argv[]) 
{ 
    initModule_nonfree(); 
    Mat image = imread("TestImage.jpg"); 

    // Create smart pointer for SIFT feature detector. 
    Ptr<FeatureDetector> featureDetector = FeatureDetector::create("SIFT"); 
    vector<KeyPoint> keypoints; 

    // Detect the keypoints 
    featureDetector->detect(image, keypoints); // here crash 
    // ... 
} 

此外,你沒有檢查指針featureDetector可能爲null(因爲你還沒有調用initModule)。

+0

是的,SIFT&SURF是專利,因此'提醒'功能 – berak

+2

似乎'initModule_nonfree()'是問題...我不知道它 –

+0

修復了我在答案中的文檔鏈接。 – remi