Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:opencv透视既不接受2个参数,也不接受3个参数_Python_Opencv_Homography - Fatal编程技术网

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]))