我知道,当我再次使用变换矩阵的逆应用 warpPerspective() 时,我获得了第一张图像:
M = cv2.getPerspectiveTransform(pts1,pts2)
warped = cv2.warpPerspective(img, M, (cols,rows))
# ... some operations, obtain a rectangle
ret, IM = cv2.invert(M)
restored = cv2.warpPerspective(warped, IM, (cols,rows))
但是,我对扭曲
应用了一些操作,并在图像上获得了一些位置(例如矩形)。我如何在恢复
图像上找到矩形的相应坐标?
感谢使用 python 和 C++ 提供的答案。
最佳答案
M = cv2.getPerspectiveTransform(pts1,pts2)
有了这个矩阵,你就得到了3x3的变换矩阵,其中包括旋转、缩放、平移、投影 vector 。
通过应用warpPerspective
,您将从源坐标系(帧{A})移动到目标坐标系(帧{B})。
要从帧 {B} 移回到帧 {A},您需要将矩阵 M 的逆矩阵与帧 {B} 中的点 P 相乘。由于矩阵是 3x3 矩阵,因此您需要将 z = 1 添加到点 P 使其成为 3x1 矩阵。
_, IM = cv2.invert(M)
x1 = 159
y1 = 99
coord = [x1, y1] + [1]
P = np.float32(coord)
x, y, z = np.dot(IM, P)
#Divide x and y by z to get 2D in frame {A}
new_x = x/z
new_y = y/z
关于python - 如何反转 warpPerspective(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34989513/