我有一个应用程序,它有两个透视变换,从两个findHomography调用中获得,它们连续应用于一组点(python):
pts = np.float32([ [758,141],[769,141],[769,146],[758,146] ]).reshape(-1,1,2)
pts2 = cv2.perspectiveTransform(pts, trackingM)
dst = cv2.perspectiveTransform(pts2, updateM)
我想将此结合到一个转换中。我尝试过以下但转换不正确:
M = trackingM * updateM
dst = cv2.perspectiveTransform(pts, M)
如何将两个矩阵变换组合成一个变换?现在我在python中进行原型设计。除了python之外的C ++解决方案将是一个奖励。
答案 0 :(得分:0)
在numpy
中,np.multiply(M, N)
为elementwise-product
,而np.dot(M,N)
为dot-product
。我认为,在您的情况下,您应该选择np.dot
。
例如:
>>> import numpy as np
>>> x = np.array([[1,2],[3,4]])
## elementwise-product
>>> x*x
array([[ 1, 4],
[ 9, 16]])
>>> np.multiply(x,x)
array([[ 1, 4],
[ 9, 16]])
## dot-product
>>> x.dot(x)
array([[ 7, 10],
[15, 22]])
>>> np.dot(x,x)
array([[ 7, 10],
[15, 22]])
答案 1 :(得分:0)
我在this post找到了答案的线索。从本质上讲,我的原始代码是按照@Silencer指出的逐元素乘法。诀窍是在进行乘法之前将变换转换为矩阵:
M = np.matrix(updateM) * np.matrix(trackingM)
dst = cv2.perspectiveTransform(pts, M)
操作数的顺序很重要。可以将上述内容视为将updatedM转换应用于trackingM转换以匹配原始问题中所述的顺序。