使用open将多个透视变换组合为一个变换

2024-10-03 23:25:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个应用程序,它有两个透视变换,从两个findHomeography调用中获得,这些调用依次应用于一组点(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)

我想把它合并成一个单一的转换。我尝试了以下方法,但转换不正确:

^{pr2}$

如何将两个矩阵变换合并为一个变换?现在我正在python中构建原型。除了Python之外,C++解决方案将是一个额外的奖励。在


Tags: 方法应用程序np矩阵cv2ptsdstfloat32
2条回答

numpynp.multiply(M, N)elementwise-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]])

我在this post中找到了答案的线索。本质上,我的原始代码是在执行@smiler指出的元素级乘法。诀窍是在进行乘法运算之前将变换转换为矩阵:

M = np.matrix(updateM) * np.matrix(trackingM)
dst = cv2.perspectiveTransform(pts, M)

操作数的顺序是重要的。我们可以把上面的内容看作是将updateM转换应用到trackingM转换,以匹配原始问题中所述的顺序。在

相关问题 更多 >