我有一个数学问题:假设我使用opencv和以下命令将图像围绕其中心旋转30°:
M = cv2.getRotationMatrix2D((cols/2,rows/2),30,1)
img_rotate = cv2.warpAffine(img,M,(cols,rows))
如果a取img_rotate的像素(40,40),我怎么知道哪个是原始图像中对应的像素?
编辑:换句话说,当我对图像应用旋转时,我得到了变换后的图像。是否有可能获得点之间的映射?例如,新图像的(x,y)点对应于原图像的(x',y')点
只需使用仿射变换和逆矩阵中描述的矩阵运算
# 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
您可以使用transform()函数对点数组应用给定的变换。
cv2.transform(pointsToTransform, M)