Объединение нескольких изображений — добавление третьего изображения

Я пытаюсь сшить третье изображение после сшивания двух изображений вместе, но, похоже, это не работает.

Чтобы уточнить, я успешно соединил два изображения вместе, используя код, приведенный в документации opencv (http://docs.opencv.org/doc/tutorials/features2d/feature_homography/feature_homography.html) и получили это изображение. https://i.stack.imgur.com/gqQjV.jpg

Затем, после большого чтения и проблем с ROI, я удалил черные части изображения, чтобы получить это изображение. введите здесь описание изображения

Теперь я пытаюсь сшить третье изображение (https://i.stack.imgur.com/nXD86.jpg), используя тот же код, но сшивка не работает. Сопоставление функций работает отлично.

введите здесь описание изображения

Но после выполнения программы я получаю то же изображение с большей черной областью (из-за ROI) и без третьего изображения. (Вывод: https://i.stack.imgur.com/WzZA0.jpg )

Я решил, что это как-то связано с крошечной черной полосой в конце сшитого изображения, поэтому оператор WarpPerspective не отображает сшитую область. Код :

Mat result;
warpPerspective(img_scene, result, H, Size(img_scene.cols*2, img_scene.rows*2), INTER_CUBIC);
Mat final(Size(img_scene.cols + img_object.cols, img_scene.rows*2),CV_8UC3);

Mat roi1(final, Rect(0, 0,  img_object.cols, img_object.rows));
Mat roi2(final, Rect(0, 0, result.cols, result.rows));
result.copyTo(roi2);
img_object.copyTo(roi1);

Результат warpperspective дает черное изображение вместо оставшейся области.

Может кто-нибудь, пожалуйста, скажите мне, где я могу ошибаться и как это исправить? Спасибо


person hriddle    schedule 18.02.2013    source источник
comment
Пока ничего. Я все еще пытаюсь.   -  person hriddle    schedule 15.03.2013
comment
Привет, ты нашел решение этой проблемы? У меня такая же проблема. Нужна помощь по этому поводу.   -  person shalki    schedule 05.02.2014


Ответы (1)


прежде всего ваш

Mat final(Size(img_scene.cols + img_object.cols, img_scene.rows*2),CV_8UC3);

должен стать

Mat final(Size(img_scene.cols + img_object.cols, img_scene.rows),CV_8UC3);

так как вам не нужно увеличивать высоту.

Теперь для копирования с ROI убедитесь, что вы не перезаписываете. Будет ли это работать вместо этого?

Mat roi2(final, Rect(img_object.cols, 0, img_object.cols + result.cols, img_object.rows));
person Boyko Perfanov    schedule 20.02.2013
comment
Я понимаю, почему строку не следует умножать на 2, но если я этого не сделаю, я получаю некоторую ошибку, касающуюся ошибки утверждения и roi. Я также получаю ту же ошибку, если использую последнее утверждение, которое вы упомянули. В любом случае, я думаю, что матрицы roi просто определяют изображение, а функция copyTo выравнивает изображение. Спасибо за попытку. - person hriddle; 15.03.2013