Интерполировать между оригинальным и преобразованным изображением

В OpenCV я использую методы сопоставления объектов, чтобы найти подходящие объекты на других изображениях. Когда я нахожу соответствующий объект, я вычисляю перспективное преобразование, используя метод «findHomography».
FindHomography

Это прекрасно работает, и я могу преобразовать изображения на основе этой матрицы. У меня есть видео, в котором альфа смешивается между исходным и преобразованным изображениями, но теперь я хочу анимировать переход между исходной и преобразованной позицией, а не просто альфа-смешивание между ними.

У меня есть матрица гомографии 3х3, которая дает мне полное преобразование, но как бы я интерполировал между отсутствием преобразования и этим? Если бы матрица 3×3 имела одиночные значения, то я бы интерполировал между 0 и значением Matrix для скольких временных шагов. Однако каждый элемент матрицы 3х3 состоит из 3 значений, я полагаю, потому что они являются однородными координатами.

Может ли кто-нибудь посоветовать лучший способ подойти к этому вопросу.

РЕДАКТИРОВАТЬ

Пробуя метод, предложенный AldurDisciple, я создаю матрицу идентичности с:

Mat eye = Mat::eye(3,3,CV_32F);

И выполняя предложенный расчет с:

Mat newH = (1-calc) * eye + calc * H;

где calc = k / N для шага / общее количество шагов.

Я получаю ошибочное утверждение, пытаясь вычислить newH с ошибкой:

src1.type() == src2.type() in function scaleAdd

1

Решение

Один простой способ сделать это — использовать линейную интерполяцию между матрицей тождества (т.е. без преобразования) и матрицей гомографии, которую вы оценили с помощью findHomograhy,

Если H это оценочная гомография и N это количество временных шагов, которые вы хотите использовать, тогда преобразование, которое нужно применить на шаге k в [0, N], выглядит следующим образом: HК = (1-аК) * Id + aК * H, сК = к / ш.

0

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

Других решений пока нет …

По вопросам рекламы [email protected]