如何反转warpPerspective()

时间:2016-01-25 09:51:33

标签: python c++ opencv matrix linear-algebra

当我再次使用变换矩阵的逆运算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))

但是,我对warped应用了一些操作,并在图像上得到了一些位置(如矩形)。我如何在restored图像上找到矩形的相应坐标?

感谢python和C ++中的答案。

2 个答案:

答案 0 :(得分:0)

您应该能够简单地将矩形的坐标作为输入数组传递给Request函数,以获得相应的变换点。例如(带有std :: vector的C ++中的示例代码):

warpPerspective

请注意,如果您需要在//r1,r2,r3,r4 are the four points of your rectangle in the source image std::vector<Point2f> rectangle_vertexes; rectangle_vertexes.push_back(r1); rectangle_vertexes.push_back(r2); rectangle_vertexes.push_back(r3); rectangle_vertexes.push_back(r4); Mat transformed_vertexes; warpPerspective(Mat(rectangle_vertexes),transformed_vertexes,IM,Size(1,4),WARP_INVERSE_MAP); 图片上应用转换M以获取src图片,则需要设置标记dst

希望这可以帮到你

答案 1 :(得分:0)

M = cv2.getPerspectiveTransform(pts1,pts2)

通过这个矩阵,您可以获得 3x3 变换矩阵,其中包括旋转、缩放、平移、投影向量。

通过应用 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