Python 3.x Python:使用透视图在OpenCV中旋转后确定点的坐标
我有一个图像Python 3.x Python:使用透视图在OpenCV中旋转后确定点的坐标,python-3.x,opencv,opencv4,Python 3.x,Opencv,Opencv4,我有一个图像img2,有两个特定的坐标点1(x,y)和点2(x,y)。当我以角度anglediff旋转图像时,这些点会移动到新图像rotated_image2中的新位置,我希望使用cv2.warpPerspective确定该位置。为此,我将这些点作为numpy数组pts提供给函数 pts = np.array([[point1[0],point1[1]],[point2[0],point2[0]]]) #given points M = cv2.getPerspectiveTransfo
img2
,有两个特定的坐标点1(x,y)
和点2(x,y)
。当我以角度anglediff
旋转图像时,这些点会移动到新图像rotated_image2
中的新位置,我希望使用cv2.warpPerspective
确定该位置。为此,我将这些点作为numpy数组pts
提供给函数
pts = np.array([[point1[0],point1[1]],[point2[0],point2[0]]]) #given points
M = cv2.getPerspectiveTransform(pts,rotated_image2)
dst = cv2.warpPerspective(img2,M,(500,400))
问题:
在运行函数时,脚本抛出
cv2.error: OpenCV(4.4.0) /tmp/pip-req-build-zeowd5_m/opencv/modules/imgproc/src/imgwarp.cpp:3391: error: (-215:Assertion failed) src.checkVector(2, CV_32F) == 4 && dst.checkVector(2, CV_32F) == 4 in function 'getPerspectiveTransform'
我的研究表明,这些变量中的任何一个pts
或rotated\u image\u 2
都没有正确传递
问题:
getPerspectiveTransform
要求第一个参数(src
)中有四个点,第二个参数(dst
)中有四个点。第一个参数传递两点,第二个参数传递未知变量
src.checkVector(2,CV_32F)=4
检查输入是否为CV_32F(单浮点)以及是否为2列4行
在任何情况下,获得单应后,可以将其传递到warpPerspective以扭曲图片,或传递到perspectiveTransform
以变换点/坐标数组
反转单应矩阵(
np.linalg.inv
或OpenCV自己的API)以另一种方式映射事物。可能是错误的数据格式。看起来warpPerspective
在您传递float64
时需要float32
?使用dtype=“float32”
转换数据类型没有什么区别。请注意,错误是由M=cv2.getPerspectiveTransform(pts,rotated_image2)