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

Поиск по сайту

Showing results for tags 'dmatch'.



More search options

  • Search By Tags

    Введите теги через запятую.
  • Search By Author

Тип содержимого


Категории и разделы

  • Пакет OpenCV
    • OpenCV
    • Новости
    • Вопросы взаимодействия OpenCV + GDI, GDI+
  • Дополненная реальность (ARToolkit и др.)
    • ARToolkit
  • Нейросети
    • Вопросы по нейросетям и ИИ
  • Общие вопросы
    • Обсуждение общих вопросов
  • Другое

Найдено 1 результат

  1. Здравствуйте. Как говорится, дальше в лес, больше дров. Продолжаю разбирать OpenCV. Написал такой код. int main( int argc, char** argv ) { string imName[2] = {"D:\\feat\\imL.jpg", "D:\\feat\\imR.jpg"}; Ptr<FeaturesFinder> finder; //finder = new SurfFeaturesFinder(); finder = new OrbFeaturesFinder(); Mat full_img, img; vector<ImageFeatures> features(2); vector<Mat> images(2); vector<Size> full_img_sizes(2); double seam_work_aspect = 1; #pragma region Find Features for (int i = 0; i < 2; ++i) { full_img = imread(imName[i], CV_LOAD_IMAGE_GRAYSCALE); full_img_sizes[i] = full_img.size(); (*finder) (full_img, features[i]); features[i].img_idx = i; for(int j = 0; j < features[i].keypoints.size(); ++j){ circle(full_img, features[i].keypoints[j].pt, 3, 255, 1, 8, 0 ); } imshow(imName[i], full_img); waitKey(0); } finder->collectGarbage(); full_img.release(); img.release(); #pragma endregion #pragma region Pairwise matching vector<MatchesInfo> pairwise_matches; BestOf2NearestMatcher matcher(false, 0.3f); matcher(features, pairwise_matches); matcher.collectGarbage(); #pragma endregion return 0; } Даю ему фотографии. Получаю особые точки. Глобальная цель: найти матрицу преобразования, которая максимально похоже переводит один снимок во второй. Делаю матчинг полученных особых точек. matcher(features, pairwise_matches); А дальше не знаю что делать... То есть есть структура pairwise_matches. Не совсем понял что такое: query descriptor index, train descriptor index, train image index, and distance between descriptors. В инете есть много примеров, но что-то они не компилируются. В частности: // Загружаем изображения: Mat img1 = imread(argv[1], CV_LOAD_IMAGE_GRAYSCALE); Mat img2 = imread(argv[2], CV_LOAD_IMAGE_GRAYSCALE); // Находим особые точки на каждом изображении // Вычисляем их дескрипторы: Ptr<Feature2D> surf=Algorithm::create<Feature2D>("Feature2D.SURF"); vector<KeyPoint> keypoints1, keypoints2; Mat descriptors1, descriptors2; surf->operator()(img1, Mat(), keypoints1, descriptors1); surf->operator()(img2, Mat(), keypoints2, descriptors2); // Находим наилучшее соответствие между особыми точками // на изображениях vector<DMatch> matches; BFMatcher(NORM_L2, true).match(descriptors1, descriptors2, matches); // Находим оптимальное преобразование, // согласующееся с большинством пар точек. vector<Point2f> pt1, pt2; for( size_t i = 0; i < matches.size(); i++ ) { pt1.push_back(keypoints1[matches[i].queryIdx].pt); pt2.push_back(keypoints2[matches[i].trainIdx].pt); } // H – это матрица оптимального перспективного // преобразования от img1 к img2 Mat H = findHomography(pt1, pt2, RANSAC, 10); Не может создать "Feature2D.SURF" детектор.
×