Как сохранить нарисованный прямоугольник в том же месте, в котором движется камера

У меня есть это приложение, где прямоугольник рисуется в начальном кадре. Я хотел знать, возможно ли сделать прямоугольник частью изображения, начиная со следующего кадра.

Например, в моем первом кадре я бы нарисовал что-то вроде этого, но немного темнее
http://imgur.com/zACIiHJ

Я хочу, чтобы он стал частью окружающей среды, чтобы в следующий раз, когда моя камера получила доступ к этому кадру, я увидел прямоугольную рамку. Как это сделать с помощью OpenCV?

Редактировать: Мой алгоритм находит и рисует прямоугольник в первом кадре. Я пытаюсь держать прямоугольник в том же месте, когда камера движется, и прямоугольник не всегда должен быть на белой доске.

0

Решение

То, чего вы пытаетесь достичь, возможно, но это потребует некоторых исследований и работы с вашей стороны. Одним из возможных решений вашей проблемы является использование Optical Flow (http://en.wikipedia.org/wiki/Optical_flow) анализ, чтобы контролировать видимое движение объектов в вашей камере зрения. Вы можете использовать полученное поле оптического потока, чтобы применить «коррекцию» к позициям углов вашего прямоугольника между каждым кадром. Вот ссылка на документацию OpenCV для их функций оптического потока:

http://docs.opencv.org/modules/gpu/doc/video.html

Если конкретное устройство, которое вы используете, имеет гироскоп и gps / ins, вы также можете использовать эти данные для дополнения данных оптического потока. Дайте мне знать, как это происходит, звучит как действительно веселый проект!

0

Другие решения

Вам нужен статический прямоугольник, который не имеет ничего общего с тем, что в изображение? Просто нарисуйте прямоугольник на каждом кадре, который вы снимаете.

    Rect r = Rect( .. );
rectangle( imageFromCam, r, Scalar( .. ) );

cv :: rectangle ()

Rect

0