В 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
Один простой способ сделать это — использовать линейную интерполяцию между матрицей тождества (т.е. без преобразования) и матрицей гомографии, которую вы оценили с помощью findHomograhy
,
Если H
это оценочная гомография и N
это количество временных шагов, которые вы хотите использовать, тогда преобразование, которое нужно применить на шаге k в [0, N], выглядит следующим образом: HК = (1-аК) * Id + aК * H, сК = к / ш.
Других решений пока нет …