Python: opencv warpPerspective 既不接受 2 个也不接受 3 个参数

Python: opencv warpPerspective accepts neither 2 nor 3 parameters

我使用

Feature Matching + Homography tutorial 之后找到了单应矩阵
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)

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

怎么了?

虽然可能如此违反直觉,但出于某种原因,opencv 以这种方式实现了 warpPerspective 功能:

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

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

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

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

编辑:

刚看到日期。猜猜我来不及了:P