В предыдущем задании мы обсудили как работает RANSAC + методы фильтрации шумных сопоставлений.

Давайте теперь на базе этого сделает примерно такое приложение:

Demo without webcamera

Но еще и работающее через вебкамеру.

Итого план задания - выполнять TODO в исходниках, в частности:

1) Проверьте работает ли у вас вебкамера через OpenCV, и выставите useWebcam соответственно

2) Детектируйте ключевые точки и постройте у них дескрипторы (на обеих фотографиях - ту что ищем и ту где ищем эту картинку)

3) Сопоставьте ключевые точки

4) Пофильтруйте найденные сопоставления (как минимум через K-ratio test, но лучше на ваш выбор)

5) Добавьте вывод в лог - сколько ключевых точек было изначально, и сколько осталось сопоставлений после фильтрации

6) findHomography(...) + cv::warpPerspective = нашли матрицу перехода и натянули одну картинку поверх другой

7) В конце кода поправьте управление - если пользователь нажал кнопку X, то Y.

8) Добавьте короткую текстовую справку про кнопки управления (текстом поверх окна)

9) Добавьте разбивку сколько времени занимает детектирование, сколько матчинг, сколько фильтрация (текстом поверх окна)

10) SIFT работает довольно медленно, попробуйте использовать ORB + не забудьте что тогда вам нужен другой DescriptorMatcher, насколько вырос FPS?

13) Изучите документацию и попробуйте улучшить качество/скорость - SIFT::create() и ORB::create()

14) Бонусное задание - можно попробовать сделать эффект дополненной реальности более полным - ведь сейчас если мы вкорячиваем несквик поверх коробок - то он рисуется поверх в т.ч. коробки справа, которую мы заменять не планировали. Можно попробовать это улучшить подобно тому как мы делали зеленый экран - достаточно сверить похож ли на заменяемую картинку пиксель который мы хотим заменить и если да - то только тогда заменять его на пиксель с новой картинки (на несквик).