De functie OpenCV SURF is niet geïmplementeerd

Wanneer ik het voorbeeld find_obj.cpp of een OpenCV SURF-programma probeer uit te voeren, krijg ik tijdens het uitvoeren van de code de volgende foutmelding in de opdrachtprompt. Het project is opgebouwd zonder fouten en waarschuwingen. Ik gebruik de VS2011-bèta, OpenCV 2.4 en Windows7.

Foutmelding:

OpenCV Error: The function/feature is not implemented < OpenCV was built without SURF support> in unknown function,file ..\..\..\src\opencv\modules\legacy\src\features2d.cpp, line 77

Ik heb geprobeerd de OpenCV 2.4 opnieuw te bouwen met Cmake en vervolgens VS2011 in de foutopsporingsmodus en vervolgens de lib-paden in de IDE toegevoegd, maar nog steeds geen resultaat.

Hoe kan ik dat oplossen?

    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 

using namespace std;
using namespace cv;
int main()
{
    cv::initModule_nonfree();//THIS LINE IS IMPORTANT   

   IplImage *image1 = cvLoadImage("C:\\SURF\\1.jpg"); 
    IplImage *image2 = cvLoadImage("C:\\SURF\\2.jpg");

    CvMemStorage* memoryBlock = cvCreateMemStorage();
    CvSeq* image1KeyPoints;
    CvSeq* image1Descriptors;
    CvSeq* image2KeyPoints;
    CvSeq* image2Descriptors;

   //Only values with a hessian greater than 500 are considered for keypoints
   CvSURFParams params = cvSURFParams(500, 1);
   cvExtractSURF(image1, 0, &image1KeyPoints, &image1Descriptors, memoryBlock, params);
   cvExtractSURF(image2, 0, &image2KeyPoints, &image2Descriptors, memoryBlock, params);

   return 0;
}
9

4 antwoord

Overgenomen van this antwoord (waarom Google je je vraag niet voordat je hem vraagt?):

De SIFT- en SURF-code is verplaatst in OpenCV v2.4 naar een nieuwe module genaamd nonfree . Zorg ervoor dat u ernaar linkt (DLL in Windlows). In linux wordt deze bibliotheek libopencv_nonfree.so genoemd.

10
toegevoegd
@Astor Ik heb gegoogeld en ik ben hier naartoe gebracht om mijn probleem op te lossen, bedankt. Ik weet niet dat ze ontroerd waren toen ik CMake gebruikte en ik hoef me over het algemeen niet druk te maken om libs, maar het is goed om te weten. Weet je waarom ze zijn verplaatst?
toegevoegd de auteur Jav_Rock, de bron
ya ik heb de opencv forums googled en ik heb de opencv_nonfree240.lib ... opgenomen en de headers zijn 1 ...... opencv2/objdetect/objdetect.hpp ....... 2 ...... opencv2/features2d /features2d.hpp ..... 3 ...... opencv2/highgui/highgui.hpp ...... 4 ...... opencv2/calib3d/calib3d.hpp ..... 5. ..... opencv2/nonfree/nonfree.hpp ...... 6 ...... opencv2/imgproc/imgproc_c.h ....... 7 ...... opencv2/legacy/legacy.hpp ...... 8 ...... opencv2/legacy/compat.hpp ......
toegevoegd de auteur rotating_image, de bron
@Astor .... in de IDE ... ik heb het pad ingesteld naar de C: \ OpenCV2.4 \ opencv \ build \ x86 \ vc10 \ lib ... ik heb de opencv2.4 in c-schijf opgeslagen ... de bin-map bevat alle dll waar ik het heb gecontroleerd bevat de opencv_nonfree240.dll ... en in de aanvullende afhankelijkheden die ik heb gegeven aan de opencv_nonfree240.lib
toegevoegd de auteur rotating_image, de bron
bibliotheek mappen = C: \ OpenCV2.4 \ opencv \ build \ x86 \ vc10 \ lib extra afhankelijkheden = opencv_nonfree240.lib dit is mijn instelling in VS2011
toegevoegd de auteur rotating_image, de bron
@astor ... ya ik heb alles gedaan wat nodig is ... alle andere programma's die gebruikmaken van opencv-bibliotheken werken prima ..i donno waarom dit een probleem is ... ik plaats een kleine voorbeeldcode die ik heb geschreven
toegevoegd de auteur rotating_image, de bron
thanx astor voor je richtlijnen ... het probleem is opgelost ... ik was vergeten de regel cv :: initModule_nonfree() ...
toegevoegd de auteur rotating_image, de bron

Het is geen fout. SURF bevindt zich in een niet-vrije module. Om het te gebruiken, moet u de niet-vrije module initialiseren:

    #include  
    ... 
    cv::initModule_nonfree();
8
toegevoegd

Onlangs leerde ik de SURF. Voor deze vraag kunt u de opencv_nonfree240d.lib en opencv_nonfree240.lib toevoegen aan het lib-pad van uw project.

3
toegevoegd

Voor ubuntu het script op https://help.ubuntu.com/community/OpenCV kan worden aangepast voor niet-gratis surf/zift gebruik door toe te voegen

libopencv_nonfree

tot het einde van het sudo apt-get commando, en

-D BUILD_opencv_nonfree = AAN

tot het einde van de opdracht cmake. Het werkte alleen voor mij na het de-installeren van alles wat ik kon vinden met betrekking tot opencv vanuit het softwarecentrum. Overigens had het softwarecentrum ook een opencv nonfree bibliotheek, "libopencv-nonfree2.4", wat de zaken niet leek te helpen. Ik ben geen expert in dergelijke dingen, dus ik weet niet of wat ik heb gedaan 100% goed is, maar het biedt wel commando's zoals

surf = cv2.SURF (400)

en

keypoints = surfDetector.detect (im)

om uit te voeren wat niet eerder was (de eerste veroorzaakte een 'niet gevonden' typefout terwijl de tweede een segfault veroorzaakte).

De versie van opencv.sh waarmee ik niet-vrije surf/zift geplakt kon gebruiken om http://pastebin.com/sQzDdx5i
De versie die nu werkt is opencv-2.4.9 maar mogelijk zou dit voor andere versies werken, aangezien het script enigszins agnostisch lijkt te zijn, evenals de lib-namen.

0
toegevoegd