使用openCV和python旋转2D点

时间:2017-09-04 14:23:22

标签: python opencv matrix rotation

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

感谢您的帮助!

编辑:

旋转矩阵

[[  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

但这并没有给我一个2x1矩阵,但是:

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

2 个答案:

答案 0 :(得分:2)

请检查site。当$(OBJS)创建仿射变换时,您可以像这样编写调用结果:

如果您现在想要变换2D点,则必须计算此表达式


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

修改:关于您的修改:您无法使用cv2.getRotationMatrix2D运算符,但应使用*np.dot()运算符仅为矩阵对象执行实矩阵向量积。否则,它正在执行元素产品。

答案 1 :(得分: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)