2017-10-16 5 views
-1

J'utilise opencv 3.3.0Après avoir ajouté SurfFeatureDetector, programme donnant erreur

mon code est

#include <stdio.h> 
#include <iostream> 
#include "opencv2/core.hpp" 
#include "opencv2/imgcodecs.hpp" 
#include "opencv2/highgui.hpp" 
#include "opencv2/features2d.hpp" 
#include "opencv2/xfeatures2d.hpp" 
#include <fstream> 
#include <string> 
#include <vector> 

using namespace cv; 
using namespace std; 
using namespace cv::xfeatures2d; 

int main(int argc, char** argv) 
{ 
    Mat img1; 
    img1 = imread("img/img1.jpg", IMREAD_GRAYSCALE); 

    if (img1.empty()) 
    { 
     cout << "Could not open or find the image" << endl; 
     return -1; 
    } 

    Ptr<SurfFeatureDetector> detector = SurfFeatureDetector::create(400); 
    vector<KeyPoint> keypoints; 
    detector->detect(img1, keypoints); 

    imshow("img1", img1); 
    waitKey(0); 
    return 0; 
} 

Je suis nouveau à C++ et opencv. Le code fonctionne bien sans partie surf.

erreur

OpenCV Error: Assertion failed (TlsSetValue(tlsKey, pData) == TRUE) in cv::TlsAbstraction::SetData, file C:\Users\Darshana\Documents\opencv\opencv-3.3.0\modules\core\src\system.cpp, line 1270

J'ai essayé avec Ptr<SURF> detector = SURF::create(400); aussi bien.

MISE À JOUR

Je ne pouvais pas trouver une solution pour cela. Peut-être un problème d'installation ou de bibliothèque. Donc, je viens de passer à opencv 2.4.13 et maintenant tout fonctionne bien. J'ai dû changer le code ci-dessus pour travailler avec v2.4.13 cependant.

+0

Si vous votez en bas, veuillez indiquer une raison. – Darshana

Répondre

0

Vous n'avez pas défini de paramètre pour SurfFeatureDetector. Je pense que vous devriez essayer ceci:

int minHessian = 400; 
SurfFeatureDetector detector(minHessian); 
vector<KeyPoint> keypoints; 
detector.detect(img1, keypoints); 
+0

J'ai déjà essayé ça. Cela ne fonctionnera pas avec 'opencv 3.3.0'. Cela donne des erreurs de compilation. – Darshana

+0

Oh, j'utilise 'opencv 2.4.13' et' SURF', 'SurfFeatureDetector',' SurfDescriptorExtractor' est le même. –