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
我使用
在 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