我发现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个参数尝试过吗?
怎么了?
答案 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