OpenCV Matcher - исключение std :: bad_alloc - PullRequest
0 голосов
/ 25 ноября 2011

Я пытаюсь соединить несколько изображений, чтобы создать панораму.Я использую 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;
    }

1 Ответ

1 голос
/ 06 марта 2012

Необходимо убедиться, что следующие «Дополнительные зависимости» в разделе «Свойства-> Компоновщик-> Вход» относятся к правильным библиотекам OpenCV с поддержкой отладчика.

т.е.

C:\OpenCV2.2\lib\opencv_calib3d220d.lib
C:\OpenCV2.2\lib\opencv_core220d.lib
C:\OpenCV2.2\lib\opencv_features2d220d.lib
C:\OpenCV2.2\lib\opencv_highgui220d.lib
C:\OpenCV2.2\lib\opencv_imgproc220d.lib

вместо

C:\OpenCV2.2\lib\opencv_calib3d220.lib
C:\OpenCV2.2\lib\opencv_core220.lib
C:\OpenCV2.2\lib\opencv_features2d220.lib
C:\OpenCV2.2\lib\opencv_highgui220.lib
C:\OpenCV2.2\lib\opencv_imgproc220.lib
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...