Python:opencv透视既不接受2个参数,也不接受3个参数
我发现单应矩阵如下使用 现在我需要扭曲第二个图像(旋转的图像)以匹配第一个图像的关键点,因此我尝试直接在Python:opencv透视既不接受2个参数,也不接受3个参数,python,opencv,homography,Python,Opencv,Homography,我发现单应矩阵如下使用 现在我需要扭曲第二个图像(旋转的图像)以匹配第一个图像的关键点,因此我尝试直接在img2上使用warpprospective,因为我们已经有了单应矩阵。(他们在本教程中未使用warpPersective) 它抱怨我错过了第三个论点 TypeError: Required argument 'dsize' (pos 3) not found 很公平,我检查了中的dsize是什么,似乎是目标图像的大小。好吧,如果没有给出,它可以被推断出来,但是opencv期待它(grrr…
img2
上使用warpprospective
,因为我们已经有了单应矩阵。(他们在本教程中未使用warpPersective)
它抱怨我错过了第三个论点
TypeError: Required argument 'dsize' (pos 3) not found
很公平,我检查了中的dsize
是什么,似乎是目标图像的大小。好吧,如果没有给出,它可以被推断出来,但是opencv期待它(grrr…好的opencv,我会给你)。我又试了一次
dst = cv2.warpPerspective(img2, M, img2.shape)
然后它抛出
TypeError: function takes exactly 2 arguments (3 given)
等等,我刚才不是用两个论点试过吗
怎么了?尽管这可能会违反直觉,但出于某种原因,opencv以以下方式实现了
透视功能:
corrected_image = cv2.warpPerspective(img1, M, (img1.shape[1], img1.shape[0]))
还注意到,M用于将第一个图像映射到第二个图像,这意味着我可以在第一个图像上使用M来扭曲它并使其与第二个图像重叠。(如问题所示,我试图在img2上使用它,但它不起作用)
而有趣异常的原因尚不清楚。(如果您知道原因,请随时更新此答案)您所做的问题是,您正在向“shape”参数传递3个参数,而不是2个参数。对形状为(H,W)的灰度图像执行透视变换。RGB图像具有形状(H、W、3),其中最后一个维度显示通道数——红色、绿色和蓝色。尝试灰度图像,不会出现错误:)
编辑:
我刚看到日期。我想我太晚了:P这个问题很有趣首先对OpenCV感到恐惧。@zindarod谢谢,但当我试图按照(相同的)教程做事情时,我产生了怀疑:我发现这个问题确实令人困惑,需要谷歌所不能提供的帮助。为什么否决?我同意,这是一个非常好的问题。很可能这就是原因:第二个例外是函数只接受2个参数,但它没有说明是哪个函数。我怀疑这个有趣的异常的原因是,shape元组的两个值可能被传递给了另一个函数,当我给出.shape
时,它会抱怨,这导致了3个参数。
TypeError: function takes exactly 2 arguments (3 given)
corrected_image = cv2.warpPerspective(img1, M, (img1.shape[1], img1.shape[0]))