2013-08-20 181 views
2

我收到以下错误而执行我的代码:(与Qt Creator的OpenCV的)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

代码:

的.pro文件的
#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; 
} 

内容

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

了解它..包含nonfree.hpp – krammer