Перейти к содержимому
Compvision.ru
Eugene840

Пример matcher_simple в OpenCV2.2

Recommended Posts

Здравствуйте.

Не могу разобраться с примером matcher_simple в OpenCV2.2 (OpenCV2.2\samples\cpp\matcher_simple.cpp):


#include <stdio.h>

#include <opencv2/core/core.hpp>

#include <opencv2/features2d/features2d.hpp>

#include <opencv2/highgui/highgui.hpp>


using namespace cv;


void help()

{

	printf("\nThis program demonstrates using features2d detector, descriptor extractor and simple matcher\n"

			"Using the SURF desriptor:\n"

			"\n"

			"Usage:\n matcher_simple <image1> <image2>\n");

}


int main(int argc, char** argv)

{

	if(argc != 3)

	{

		help();

		return -1;

	}


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


	return 0;

}

Изначально не загружалось изображение через imread, проблему решил следующим способом:

Ptr<IplImage> iplimg1 = cvLoadImage(argv[1], CV_LOAD_IMAGE_GRAYSCALE);

Ptr<IplImage> iplimg2 = cvLoadImage(argv[2], CV_LOAD_IMAGE_GRAYSCALE);

if(iplimg1.empty() || iplimg2.empty())

{

	return -1;

}


Mat img1(iplimg1);

Mat img2(iplimg2);

Далее при работе программы стала возникать ошибка в строке detector.detect(img1, keypoints1); - "vectors iterators incompatible". Связана ли данная ошибка с нестандартным методом загрузки изображения, или же ошибка возникает по другим причинам?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Загрузите версию с SVN там и imread работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×