【问题标题】:Interpolate between original and transformed image在原始图像和变换图像之间进行插值
【发布时间】:2014-05-09 19:50:30
【问题描述】:

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

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

我有 3x3 Homography 矩阵,它给了我完整的变换,但我将如何在没有变换和这个之间进行插值?如果 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

【问题讨论】:

    标签: c++ opencv interpolation homography


    【解决方案1】:

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

    如果H 是估计的单应性,N 是您要使用的时间步数,则在 [0,N] 中的第 k 步应用的变换如下:Hk = (1-ak) * Id + ak * H,其中 ak = k/N.

    【讨论】:

    • 我已尝试实施您的建议,我收到了一个断言失败错误,我已在对我的问题的编辑中对此进行了解释。
    • @Tomsmith 这可能是您估计的单应性类型为double,请在创建单位矩阵时尝试使用CV_64F
    • 非常感谢,现在可以了。我也遇到了整数除法的问题,但现在我的动画很流畅。
    猜你喜欢
    • 2018-07-26
    • 2014-06-21
    • 2021-08-28
    • 2016-10-02
    • 1970-01-01
    • 2015-11-17
    • 2011-02-23
    • 2014-10-01
    • 1970-01-01
    相关资源
    最近更新 更多