如何在图像旋转后重新映射点?

时间:2015-05-19 13:51:42

标签: python opencv rotation

我有一个数学问题:假设我使用带有以下命令的opencv将图像围绕其中心旋转30°:

M = cv2.getRotationMatrix2D((cols/2,rows/2),30,1)
img_rotate = cv2.warpAffine(img,M,(cols,rows))

如果取一个img_rotate的像素(40,40),我怎么知道原始图像中哪个是对应的像素?

编辑:换句话说,当我将旋转应用于图像时,我获得了变换后的图像。是否有可能获得点之间的映射?例如,新图像的(x,y)点对应于原始图像的(x',y')点。

2 个答案:

答案 0 :(得分:11)

只需使用Affine Transformations和逆矩阵中描述的矩阵运算。

# inverse matrix of simple rotation is reversed rotation.
M_inv = cv2.getRotationMatrix2D((100/2, 300/2),-30,1)


# points
points = np.array([[35.,  0.],
                   [175., 0.],
                   [105., 200.],
                   [105., 215.],
                  ])
# add ones
ones = np.ones(shape=(len(points), 1))

points_ones = np.hstack([points, ones])

# transform points
transformed_points = M_inv.dot(points_ones.T).T

答案 1 :(得分:2)

您可以使用transform()函数将给定转换应用于点数组。

cv2.transform(pointsToTransform, M)