在OpenCV中,我正在使用特征匹配技术来查找其他图像中的匹配对象。当我找到匹配的对象时,我使用"findHomography"方法计算透视变换。查找单应性
这工作正常,我可以基于此矩阵转换图像。我有一个视频,它在原始图像和转换后的图像之间进行 alpha 混合,但现在我想对原始和转换位置之间的过渡进行动画处理,而不仅仅是两者之间的 alpha 混合。
我有 3x3 单应性矩阵,它给了我完整的变换,但我如何在无变换和这个之间插值?如果 3x3 矩阵具有单个值,那么无论有多少时间步长,我都会在 0 和矩阵值之间插值。但是,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
解决此问题的一种简单方法是在单位矩阵(即无变换)和您用findHomograhy
估计的单应性矩阵之间使用线性插值。
如果 H
是估计的单应性,N
是要使用的时间步长数,则在 [0,N] 中的步骤 k 处应用的变换如下:H k = (1-a k) * Id + a k * H,其中k =k/N。