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

时间:2018-06-20 11:19:42

标签: python opencv homography

我发现Feature Matching + Homography tutorial之后的同形异形矩阵使用

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

,现在我需要变形第二张图像(旋转的图像)以匹配第一张图像的关键点,所以我尝试直接在warpPerspective上使用img2,因为我们已经有了Homography矩阵。 (他们没有在本教程中使用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个参数尝试过吗?

怎么了?

2 个答案:

答案 0 :(得分:0)

尽管出于某种直觉,出于某种原因,opencv通过以下方式实现了warpPerspective功能:

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

还要注意,获得的M用于将第一幅图像映射到第二幅图像,这意味着我可以在第一幅图像上使用M来扭曲它并使它与第二幅图像重叠。 (我正尝试按照问题所示在img2上使用它,它将无法正常工作)

有趣的例外情况的原因尚不清楚。 (如果知道原因,请随时更新此答案)

答案 1 :(得分:0)

您正在执行的操作的问题是,您将3个参数而不是2个参数传递给“ shape”参数。对形状为(H,W)的灰度图像执行透视变换。 RGB图像的形状为(H,W,3),其中最后一个尺寸显示通道数量-红色,绿色和蓝色。尝试使用灰度图像,没有错误:)

编辑:

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

相关问题