在原始图像和变换图像之间插值

时间:2014-03-30 14:33:59

标签: c++ opencv interpolation homography

在OpenCV中,我使用特征匹配技术在其他图像中查找匹配的对象。当我找到匹配的对象时,我使用" findHomography"来计算透视变换。方法。 FindHomography

这很好用,我可以根据这个矩阵变换图像。我有一个视频,在原始图像和变换图像之间混合使用alpha,但现在我想在原始位置和变换位置之间设置过渡动画,而不是仅仅在两者之间进行alpha混合。

我有3x3 Homography矩阵,它给了我完整的转换,但是如何在没有转换和这之间进行插值?如果3x3矩阵具有单个值,那么无论多少时间步长,我都会在0和Matrix值之间进行插值。然而,3x3矩阵的每个元素都由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 个答案:

答案 0 :(得分:0)

一种简单的方法是在单位矩阵(即无变换)和用findHomograhy估计的单应矩阵之间使用线性插值。

如果H是估计的单应性,N是您要使用的时间步数,那么在[0,N]中步骤k应用的变换如下:H < sub> k =(1-a k )* Id + a k * H, k = k / N