2013-08-20 3 views
2

Я получаю следующее сообщение об ошибке при выполнении моего кода: (OpenCV с Qt Creator)OpenCV SIFT экстрактор неудачу

OpenCV Error: Assertion failed (!outImage.empty()) in drawKeypoints,file C:\Ope nCV\opencv\modules\features2d\src\draw.cpp, line 115 C:\OpenCV\opencv\modules\features2d\src\draw.cpp:115: error: (-215) !outImage.em pty() in function drawKeypoints

Код:

#include <QCoreApplication> 
#include <iostream> 

#include "opencv2/core/core.hpp" 
#include "opencv2/highgui/highgui.hpp" 
#include "opencv/cv.h" 
#include <opencv2/nonfree/features2d.hpp> 

using namespace std; 
using namespace cv; 

int main(int argc, char *argv[]) 
{ 
    // QCoreApplication a(argc, argv); 
    cout << "Hello World!" << endl; 

    try { 
    cv::Mat image = cv::imread("lena.jpg",0); 
    // Create smart pointer for SIFT feature detector. 
    cv::Ptr<FeatureDetector> featureDetector = cv::FeatureDetector::create("SIFT"); 
    cv::vector<KeyPoint> keypoints; 

    // Detect the keypoints 
    featureDetector->detect(image, keypoints); // NOTE: featureDetector is a pointer hence the '->'. 

    //Similarly, we create a smart pointer to the SIFT extractor. 
    cv::Ptr<DescriptorExtractor> featureExtractor = cv::DescriptorExtractor::create("SIFT"); 

    // Compute the 128 dimension SIFT descriptor at each keypoint. 
    // Each row in "descriptors" correspond to the SIFT descriptor for each keypoint 
    cv::Mat descriptors; 
    featureExtractor->compute(image, keypoints, descriptors); 

    // If you would like to draw the detected keypoint just to check 
    cv::Mat outputImage; 
    cv::Scalar keypointColor = cv::Scalar(255, 0, 0);  // Blue keypoints. 
    drawKeypoints(image, keypoints, outputImage, keypointColor, cv::DrawMatchesFlags::DEFAULT); 

    cvNamedWindow("Output"); 
    cv::imshow("Output", outputImage); 

    char c = ' '; 
    cvWaitKey(0); 

    } 
    catch(cv::Exception e) 
    { 
     cout<< e.msg; 
    } 

    return 0; 
} 

содержимое файла .pro

INCLUDEPATH += "C:\\OpenCV\\opencv\\build\\x64\\mingw\\bin\\install\\include" \ 
        "C:\\OpenCV\\opencv\\build\\x64\\mingw\\bin\\install\\include\\opencv" 

\ "C:\OpenCV\opencv\build\x64\mingw\bin\install\include\opencv2"

LIBS += -L"C:\\OpenCV\\opencv\\build\\x64\\mingw\\bin\\install\\lib" \ 
     -lopencv_core244d \ 
     -lopencv_highgui244d \ 
     -lopencv_imgproc244d \ 
     -lopencv_features2d244d \ 
     -lopencv_nonfree244d 

Я проверил, что lena.jpg присутствует в рабочем каталоге

+0

Вы подтвердили, что 'image' содержит данные сразу после загрузки? Я не могу воспроизвести проблему, используя абсолютный путь к изображению. – Aurelius

ответ

3

call cv :: initModule_nonfree(); в основном, перед тем, как делать что-либо еще

+0

Я пробовал, но получаю эту ошибку: 'initModule_nonfree' не является членом 'cv' – krammer

+0

Я также пробовал initModule_features2d(), но мое приложение вылетает при запуске. Он просто говорит, что «приложение перестало работать». – krammer

+0

получил его..forgot для включения nonfree.hpp – krammer

Смежные вопросы