【问题标题】:Python: opencv warpPerspective accepts neither 2 nor 3 parametersPython:opencv warpPerspective 既不接受 2 也不接受 3 个参数
【发布时间】:2018-11-29 12:22:39
【问题描述】:

我使用Feature Matching + Homography tutorial 找到了 Homography 矩阵

M, mask = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC,5.0)

现在我需要扭曲第二张图像(旋转的一张)以匹配第一张的关键点,所以我尝试直接在img2 上处理warpPerspective,因为我们已经有了单应矩阵。 (他们在教程中没有使用 warpPersective)

dst = cv2.warpPerspective(img2, M)

它抱怨我缺少第三个参数

TypeError: Required argument 'dsize' (pos 3) not found

很公平,我检查了docs 中的dsize 是什么,它似乎是目标图像大小。好吧,如果没有给出它可以被推断出来,但是opencv期待它,(grrr ...好的opencv,我会给你)。我又试了

dst = cv2.warpPerspective(img2, M, img2.shape)

它会抛出

TypeError: function takes exactly 2 arguments (3 given)

等等,我刚才不是用 2 个参数尝试过吗?

怎么了?

【问题讨论】:

  • 这个问题很有趣.. :D
  • 首先在 OpenCV 上阅读 this tutorial
  • @zindarod 谢谢,但我在尝试按照(相同)教程进行操作时遇到了疑问:Feature Matching + Homography
  • 我发现这个问题确实令人困惑,需要谷歌无法提供的帮助。为什么投反对票?
  • 我同意,这是一个非常好的问题。

标签: python opencv homography


【解决方案1】:

虽然可能很反直觉,但出于某种原因,opencv 以这种方式实现了warpPerspective 函数:

corrected_image = cv2.warpPerspective(img1, M, (img1.shape[1], img1.shape[0]))

还注意到,获得的 M 用于将第一张图像映射到第二张图像,这意味着我可以在第一张图像上使用 M 来扭曲它并使其与第二张图像重叠。 (我试图在 img2 上使用它,如问题所示,但它不起作用)

有趣的异常的原因尚不清楚。 (如果您知道原因,请随时更新此答案)

【讨论】:

  • 这很可能是原因:第二个异常表示该函数只需要 2 个参数,但它没有说明哪个函数。我怀疑这个有趣的例外的原因是形状元组的两个值可能被传递给了另一个函数,当我给 .shape 时它抱怨了,这导致了 3 个参数。
【解决方案2】:

您正在做的问题是您将 3 个参数而不是 2 个参数传递给“shape”参数。对形状为 (H,W) 的灰度图像进行透视变换。 RGB 图像的形状为 (H,W,3),其中最后一个维度显示通道数——红色、绿色和蓝色。尝试使用灰度图像,不会出现错误:)

编辑:

刚刚看到日期。估计我来晚了:P

【讨论】:

    猜你喜欢
    • 2021-08-10
    • 1970-01-01
    • 2023-03-16
    • 2013-11-18
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多