Я пытаюсь соединить несколько изображений, чтобы создать панораму.Я использую OpenCV, поэтому первое, что нужно сделать, это обнаружить ключевые точки и дескрипторы, чем сопоставлять их.Для этого я следую этому уроку: http://opencv.itseez.com/doc/user_guide/ug_features2d.html Но во время отладки я получаю исключение std :: bad_alloc относительно этой строки:
matcher.match(descriptors1, descriptors2, matches);
Кто-нибудь может мне помочь с этим?Потому что я вырезал и вставил учебник, и нет ошибок компиляции.
Спасибо.G
Полный код:
Mat img1 = imread(argv[1], CV_LOAD_IMAGE_GRAYSCALE);
Mat img2 = imread(argv[2], CV_LOAD_IMAGE_GRAYSCALE);
if(img1.empty() || img2.empty())
{
printf("Can't read one of the images\n");
return -1;
}
// detecting keypoints
SurfFeatureDetector detector(400);
vector<KeyPoint> keypoints1, keypoints2;
detector.detect(img1, keypoints1);
detector.detect(img2, keypoints2);
// computing descriptors
SurfDescriptorExtractor extractor;
Mat descriptors1, descriptors2;
extractor.compute(img1, keypoints1, descriptors1);
extractor.compute(img2, keypoints2, descriptors2);
// matching descriptors
BruteForceMatcher<L2<float> > matcher;
vector<DMatch> matches;
matcher.match(descriptors1, descriptors2, matches);
// drawing the results
namedWindow("matches", 1);
Mat img_matches;
drawMatches(img1, keypoints1, img2, keypoints2, matches, img_matches);
imshow("matches", img_matches);
waitKey(0);
Обновление:
если я запускаю этот код, я получаю:
Ошибка проверки во время выполнения # 2 - стек вокруг переменной 'keypoints1' поврежден.
Код:
#include "opencv\cv.h"
#include "opencv\highgui.h"
using namespace cv;
using namespace std;
int main()
{
Mat img1 = imread("Chessboard1.jpg", CV_LOAD_IMAGE_GRAYSCALE);
Mat img2 = imread("Chessboard3.jpg", CV_LOAD_IMAGE_GRAYSCALE);
if(img1.empty() || img2.empty())
{
printf("Can't read one of the images\n");
return -1;
}
FastFeatureDetector detector(50);
vector<KeyPoint> keypoints1;
detector.detect(img1, keypoints1);
return 0;
}