Я написал простую программу в OpenCV, которая обнаруживает функцию SURF на заданном изображении и отображает обнаруженные функции в именованном окне.
#include <iostream>
#include <opencv2\core\core.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <opencv2\features2d\features2d.hpp>
using namespace cv;
int main(int argc,char** argv)
{
if(argc!=3)//Check cmd number of argumets
{
std::cout<<"Usage: "<<argv[0]<<" <image-file> <method>"<<std::endl;
return -1;
}
//LOAD THE SOURCE IMAGE
Mat Img = imread(argv[1],CV_LOAD_IMAGE_GRAYSCALE);
if(!Img.data)//Check correct image load
{
std::cout<<"Cannot read image file. Check file path!"<<std::endl;
return -1;
}
//COMPUTE FEATURES
SurfFeatureDetector detector;
std::vector<KeyPoint> features;
detector.detect(Img,features);
//SHOW RESULT
Mat ImgF;
drawKeypoints(Img,features,ImgF);
namedWindow("Features", CV_GUI_NORMAL);
imshow("Features",ImgF);waitKey();
return 0;
}
Все в порядке, программы делают то, что должны. Проблема в том, что при нажатии клавиши для завершения программы возникает ошибка сбоя.
Это не сработало для меня … но для того, чтобы я скомпилировал ваш код, мне пришлось добавить
#include <opencv2/nonfree/features2d.hpp>
потому что SURF был перенесен в несвободный модуль в какой-то момент.
Итак, я бы рекомендовал попробовать новейшую версию (2.4.6 на сегодняшний день).
Других решений пока нет …