2012-06-24 5 views
9

Когда я пытаюсь запустить образец find_obj.cpp или любую программу OpenSV SURF, я получаю следующую ошибку в командной строке при выполнении кода. Проект строится без ошибок и предупреждений. Я использую VS2011 бета, OpenCV 2.4 и Windows7.Функция OpenSV SURF не реализована

Сообщение об ошибке:

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 

Я попытался построить OpenCV 2.4 снова с помощью CMake, а затем VS2011 в режиме отладки, а затем добавили Lib пути в интегрированной среде, но до сих пор никакого результата.

Как это исправить?

#include <opencv2/objdetect/objdetect.hpp> 
    #include <opencv2/features2d/features2d.hpp> 
    #include <opencv2/core/core.hpp> 
    #include <opencv2/highgui/highgui.hpp> 
    #include <opencv2/legacy/legacy.hpp> 
    #include <opencv2/legacy/compat.hpp> 
    #include <opencv2/flann/flann.hpp> 
    #include <opencv2/calib3d/calib3d.hpp> 
    #include <opencv2/nonfree/features2d.hpp> 
    #include <opencv2/nonfree/nonfree.hpp> 

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; 
} 

ответ

10

Взятые из this answer (почему бы вам не Google свой вопрос, прежде чем спрашивать?):

SIFT и SURF код был перемещен в OpenCV v2.4 новый модуль под названием nonfree. Убедитесь, что вы связываете (DLL в Windlows) с ним. В linux эта библиотека называется libopencv_nonfree.so.

+2

ya i googled форумы opencv и я включил opencv_nonfree240.lib ..и заголовки 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.hpp ...... 8. ..... opencv2/legacy/compat.hpp ...... –

+0

@Astor .... в IDE ... я установил путь к C: \ OpenCV2.4 \ opencv \ build \ x86 \ vc10 \ lib ... Я сохранил файл opencv2.4 в c ... папка bin содержит всю DLL, где я проверил ее, содержит opencv_nonfree240.dll ... и в дополнительных зависимостях, которые я дал opencv_nonfree240. lib –

+0

библиотеки каталогов = C: \ OpenCV2.4 \ opencv \ build \ x86 \ vc10 \ lib дополнительные зависимости = opencv_nonfree240.lib это моя настройка в VS2011 –

3

В последнее время я изучаю SURF. По этому вопросу вы можете добавить opencv_nonfree240d.lib и opencv_nonfree240.lib в путь к вашему проекту.

8

Это не ошибка. SURF находится в несвободном модуле. Для того, чтобы использовать его, вы должны инициализировать несвободный модуль:

#include <opencv2/nonfree/nonfree.hpp> 
    ... 
    cv::initModule_nonfree(); 
0

Для убунта скрипт на https://help.ubuntu.com/community/OpenCV могут быть модифицированы для несвободного прибоя/просеять использование путем добавления

libopencv_nonfree

к концу Судо APT-получить команду и

-D BUILD_opencv_nonfree = ON

до конца команды cmake. Это помогло мне после удаления всего, что я мог найти, с opencv из программного центра. Кстати, в программном центре также была открытая неохраняемая библиотека «libopencv-nonfree2.4», которая, похоже, не помогала. Я не являюсь экспертом в таких вещах, так что я не знаю, что я сделал это 100% правильно, но это позволяет команды, такие как

прибоя = cv2.SURF (400)

и

keypoints = surfDetector.detect (im)

для запуска, который ранее не был (первый вызвал ошибку типа «не найден», а второй вызвал segfault).

версии opencv.sh, что позволило мне использовать несвободный прибой/просеять приклеиваются к http://pastebin.com/sQzDdx5i
версии, которая работает сейчас OpenCV-2.4.9, но, возможно, это будет работать для других версий сценария, кажется, несколько агностически, как и имена lib.

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