使用openCV和python旋转2D点

问题描述:

我使用cv2.getRotationMatrix2D来获取旋转源图像的2x3矩阵。这工作正常。现在我有几个2D坐标,它们代表未旋转图像中的点。 我可以使用相同的矩阵来旋转单个点吗?如果是,如何? 如果我理解正确的话,我应该能够将矩阵与(x,y)坐标相乘,但无论我尝试使用哪种矩阵和点的组合,我都不会得到简单的x和y坐标。使用openCV和python旋转2D点

感谢您的帮助!

编辑:

旋转矩阵是

[[ 9.24630834e-01 3.80864571e-01 1.52747702e-01] 
[ -3.80864571e-01 9.24630834e-01 1.57068951e+02]] 

什么我到目前为止做:

point = np.array([marker.x, marker.y, 1]) 
transform = rot_matrix * point.T 
print transform 

但是这并没有给我一个2×1矩阵,因为它应该,但是:

[[ 2.10815830e+02 7.92198307e+01 1.52747702e-01] 
[ -8.68371221e+01 1.92323213e+02 1.57068951e+02]] 
+0

你可以包含几行代码段的定义的例子,只是我清楚如何解决它?我有一个想法如何做,但我需要看看你有什么评论。 –

+0

感谢您的关注,FlashTek的回答给了我正确的提示。 –

请检查t他的site。由于cv2.getRotationMatrix2D创建了仿射变换,因此您可以编写如下调用结果:

如果你现在要变换2D点你要计算这个表达式


这应该解决您的问题。 (所有图片来自参考文档页面)

编辑:关于您的编辑:您不能使用*运算符,但应该使用np.dot()。运算符仅为矩阵对象执行实数矩阵向量积。否则,它正在执行一个基于元素的产品。

+0

这或多或少是我做的,请检查我的编辑。这应该是我想要做的最后一个等式,对吧? –

+0

@MaikFruhner看我的编辑。 – FlashTek

+0

谢谢!就是这样.. –

这会帮你吗?

定义两个数组xArray和yArray与要变换

for indexItem in xrange(len(xArray)): 
    point = np.array([xArray[indexItem], yArray[indexItem], 1]) 
    transform = rot_matrix * point.T 
    print transform 

它不是很雄辩,但应该做的伎俩点。如果你真的想创建一个标记阵列,那么你必须使用:

markers = zip(xArray, yArray)