我在 Android 上使用 OpenCV。我使用
goodFeaturesToTrack
方法来查找视频帧中的特征。然后,我拍摄下一个视频帧,并使用 calcOpticalFlowPyrLK
找到其中的这些特征,并使用 estimateAffinePartial2D
估计所需的转换。到目前为止,一切都按我的预期进行。
我想要实现的是这个,给定来自
estimateAffinePartial2D
的几个变换矩阵,我想要有一个可以应用于原始帧以获得最后一帧的矩阵,即具有m1(frame_0 - >frame_1),m2 ... mn,我想计算frame_0到frame_n之间转换的Mn。
estimateAffinePartial2D
返回的矩阵是2x3
[[cos(theta)*s, -sin(theta)*s, tx];
[sin(theta)*s, cos(theta)*s, ty]]
我尝试添加一行 1 并将两个矩阵相乘,但结果矩阵似乎并不对应于组合两个变换的变换(相乘的翻译似乎是错误的)。
>>> arr1 = np.array([[cos(pi / 4.), -sin(pi / 4.), 100], [sin(pi / 4.), cos(pi / 4.), 100], [1, 1, 1]])
>>> arr2 = np.array([[cos(pi / 2.), -sin(pi / 2.), 50], [sin(pi / 2.), cos(pi / 2.), 50], [1, 1, 1]])
>>> arr_result = np.multiply(arr1, arr2)
>>> print(arr_result)
[[4.32978028e-17 7.07106781e-01 5.00000000e+03]
[7.07106781e-01 4.32978028e-17 5.00000000e+03]
[1.00000000e+00 1.00000000e+00 1.00000000e+00]]