2015-03-25 3 views
0

Я делаю мозаику из видео в Opencv. Я использую этот пример для сшивания кадров видео: http://docs.opencv.org/doc/tutorials/features2d/feature_detection/feature_detection.html. В конце концов, я делаю это для слияния новый кадр с стежок, созданный на пройденный итерации:Opencv Изменить размер строчки

Mat H = findHomography(obj, scene, CV_RANSAC); 

static Mat rImg; 
warpPerspective(vImg[0], rImg, H, Size(vImg[0].cols, vImg[0].rows), INTER_NEAREST);//(vImg[0], rImg, H, Size(vImg[0].cols * 2, vImg[0].rows * 2), CV_INTER_LINEAR); 

static Mat final_img(Size(rImg.cols*2, rImg.rows*2), CV_8UC3); 
static Mat roi1(final_img, Rect(0, 0, vImg[1].cols, vImg[1].rows)); 
Mat roi2(final_img, Rect(0, 0, rImg.cols, rImg.rows)); 

rImg.copyTo(roi2); 
vImg[1].copyTo(roi1); 

imwrite("stitch.jpg", final_img); 
vImg[0] = final_img; 

Так вот моя проблема: очевидно, стежок становится больше на каждой итерации, так как я могу изменить его в сделать его подходящим в изображении final_img?

EDIT Извините, но я должен был удалить изображения

ответ

0

Что касается второго вопроса,, что вы наблюдаете это ошибка в омографии, что было оценено. Это может исходить либо от:

  1. дрейфа (если цепь homographies вдоль последовательности), то есть небольшие ошибки, которые накапливаются и становятся большими после десятков кадров
  2. или (более вероятно), потому что ваше эталонное изображение слишком старые в отношении вашего нового изображения, и они показывают слишком мало совпадающих точек, чтобы дать точную гомографию, но все же достаточно, чтобы найти тот, который проходит тест качества внутри cv::findHomography().

Для вашего первого вопроса, то вам нужно добавить некоторый код, который отслеживает текущие пределы сшиты изображения в фиксированной системе координат. Я бы предложил выбрать координаты, связанные с первым изображением.

Затем, когда вы создаете новое изображение, вы действительно должны проецировать это изображение на эту рамку координат. Вы можете сначала вычислить проецируемые координаты четырех углов входящего кадра, проверить, соответствуют ли они текущему результату строчки, при необходимости скопировать его на новое (большее) изображение, а затем продолжить сшивание нового изображения.

+0

Привет! на каждом шаге стежка я обновляю ссылочное изображение только сшитым, поэтому я думаю, что я в том случае, когда вы назвали дрейф. Если я в этом случае, как я могу решить? По первому вопросу, я постараюсь сделать то, что вы говорите, и сообщите, работает ли это! – bjorn

+0

Если вы взяли сшитое изображение в качестве ссылки, вы также можете потерять в некоторых случаях некоторую информацию (из-за размытия, введенного интерполяцией, или разницы в шкале между сшитым результатом и текущим фреймом). Альтернативная возможность (возможно, с более высоким качеством, но большая нагрузка на разработку) заключалась бы в том, чтобы вычислить все гомографии в первый проход, а затем искать сшитое изображение, оптимизированное из всех входных кадров одновременно. – sansuiso

+0

Ммм Я понимаю, но я не могу этого сделать, потому что это поток, а не видеофайл на ПК. Сейчас я пытаюсь изменить размер стежка, я сообщу, если мне удастся. , Спасибо за быстрые ответы! – bjorn

Смежные вопросы