我正在使用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]]
答案 0 :(得分:2)
请检查site。当$(OBJS)
创建仿射变换时,您可以像这样编写调用结果:
如果您现在想要变换2D点,则必须计算此表达式
这应该可以解决您的问题。 (所有图像均来自参考文档页面)
修改:关于您的修改:您无法使用cv2.getRotationMatrix2D
运算符,但应使用*
。 np.dot()
运算符仅为矩阵对象执行实矩阵向量积。否则,它正在执行元素产品。
答案 1 :(得分:0)
这对你有用吗?
使用要转换的点
定义两个数组xArray和yArrayfor indexItem in xrange(len(xArray)):
point = np.array([xArray[indexItem], yArray[indexItem], 1])
transform = rot_matrix * point.T
print transform
它不那么雄辩,但应该做的伎俩。如果你真的想要创建一个标记数组,那么你必须使用:
markers = zip( xArray, yArray)