Использование FeatureDetector в OpenCV дает нарушение прав доступа

Мне нужно найти и сопоставить характерные точки в стереоизображениях. Поэтому я хочу сравнить различные алгоритмы обнаружения функций, которые поддерживаются в OpenCV 2.4.5. путем передачи функции «SURF», «SIFT» и т. д.

Фрагмент кода:

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

using namespace cv;
using namespace std;

...

void DisparityAnalysis::detectKeyPoints(Mat1b leftImageGrey, Mat1b rightImageGrey, string algorithmName)
{
    Ptr<FeatureDetector> detector = FeatureDetector::create(algorithmName);
    detector->detect(leftImageGrey, keypoints_1);
    detector->detect(rightImageGrey, keypoints_2);
}

Ошибка:

Unhandled exception at 0x770b15de in DisparityAnalysis.exe: 0xC0000005: Access violation reading location 0x00000000.

Я уже искал решения и нашел это: Нарушение прав доступа чтение в FeatureDetector OpenCV 2.4.5 Разница, которую я заметил, заключается в том, что они используют cv::initModule_nonfree() в начале. Но при копировании в мой код он не компилируется, потому что идентификатор не найден. Какие-либо предложения?


person filla2003    schedule 22.07.2013    source источник


Ответы (1)


для SIFT и SURF вам понадобится несвободный модуль, то есть:

  • включить "opencv2/nonfree/nonfree.hpp"

  • вызов cv::initModule_nonfree() в начале

  • ссылка на opencv_nonfree2.4.x.lib

person berak    schedule 22.07.2013
comment
спасибо @berak, потому что opencv2/nonfree/nonfree.hpp отсутствовал, cv::initModule_nonfree() выдавал ошибку - person filla2003; 22.07.2013