tipabot 0 Жалоба Опубликовано November 11, 2012 Всем привет Есть проблема с матрицей перспективных преобразований Для получения матрицы я использую функцию findHomography Все отрабатывает хорошо Далее я использую функцию warpPerspective (понимаю это очевидно) В результате изображение получается правильным, но обрезанным с левой строны Вот пример у меня есть исходное https://dl.dropbox.com/u/20178650/Univ2.jpg Вот после преобразований https://dl.dropbox.com/u/20178650/diff_002.png Понятно что надо подправить одно из значений матрицы преобразования, которую мы получили из findHomography В этом и заключаеться вопрос В итоге изображение должно быть в центре, а не c краю И второй вопрос, как задать правильно размер итогового изображения чтоб все влазило и при этом не было лишних черных зон Буду рад помощи Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано November 12, 2012 Попробуй подать на функцию perspectiveTransform координаты углов изображения. В результате должен получить новые координаты, вот и посмотришь куда они "уедут". 1 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано November 12, 2012 ну свдиг в матрице гомографии это элементы m13-x m23-y, не очень понятно что вы делаете что оно у вас уезжает. И второй вопрос, как задать правильно размер итогового изображения чтоб все влазило и при этом не было лишних черных зон это наверно имеется ввиду максимальный вписанный прямоугольник получить? надо как раз посмотреть куда углы перейдут по формуле. 1 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
tipabot 0 Жалоба Опубликовано November 12, 2012 Вот использую вот этот пример https://code.ros.org/trac/opencv/browser/trunk/opencv/samples/cpp/brief_match_test.cpp?rev=3921 Сначало мы находим опрные точки, потом производим все дальнейшие преобразования Но в итоге я имею получаю склееное изображение, но обрезанное с одного боку Мне надо его "подвинуть" чтоб получить полное изображение смотрел еще вот этот пример http://hashcode.ru/questions/106160/c-%D1%81%D0%BA%D0%BB%D0%B5%D0%B9%D0%BA%D0%B0-%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B9-opencv-%D0%B2%D1%8B%D1%80%D0%B0%D0%B2%D0%BD%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5 но он в принципе не отличаеться от выше указанного (кроме как использования разного алгоритма нахождения опорных точек) но он коректно склеивает и при этом двигает картинку, если склеивание происходит сверху или с левого бока как то так Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано November 12, 2012 возможно не ту картинку варпаете? вроде как надо правую. и как выбираете размер результирующего изображения (можно брать w=w1+w2 h=h1+h2 с запасом) обратите внимание на порядок Mat H = findHomography(Mat(mpts_2), Mat(mpts_1), outlier_mask, RANSAC, 1); warpPerspective(im2, warped, H, im1.size()); п.с. какая матрица получается? п.с. код старый, opencv уже давно понимает векторы поинтов вместо этих дурацких сиквенсов и вообще щас сделали отдельный модуль по ститчингу, лучше его посомтрите. 1 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
tipabot 0 Жалоба Опубликовано November 12, 2012 По поводу порядка пробывал двумя способами, все работает на втором примере, и не работает на первом (может в С++ интерфесе findHomography как то отлично работает от от C интрефейса ) результирущая картинка - да пока беру побольше, потом что-нибудь умное придумаю, чтоб было точно под размер п.с. какая матрица получается? не понял вопроса ну матрица получаеться 3 на 3 п.с. код старый, opencv уже давно понимает векторы поинтов вместо этих дурацких сиквенсов и вообще щас сделали отдельный модуль по ститчингу, лучше его посомтрите. да я знаю что есть, мне надо просто дописывать доп функционал, под мою задачу так что не вариант все равно спасибо за ответ будем разбираться, если что получиться отпишусь Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано November 13, 2012 Quote п.с. какая матрица получается? не понял вопроса ну матрица получаеться 3 на 3 я про сами значения матрицы. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах