我正在使用opencv' 2.4.12'。我得到一些输入的合理结果,但它以不可预测的方式失败。
src = np.array( [(164, 215), (128, 8), (480, 72)] ).reshape(1,-1,2)
dst = np.array( [(175, 237), (146, 44), (486, 99)] ).reshape(1,-1,2)
print cv2.estimateRigidTransform( dst, src, False )
[[ 1.03569069e+00 -2.16529654e-03 -2.09931922e+01]
[ 2.16529654e-03 1.03569069e+00 -3.34366192e+01]]
这工作正常,但如果dst略有改动:
dst = np.array( [(141, 221), (102, 23), (471, 10)] ).reshape(1,-1,2)
print cv2.estimateRigidTransform( dst, src, False )
None
在我看来,第二和第三输入的y坐标需要增加(如44-> 99但不是23-> 10)。否则,估计的变换有太多的错误,以至于不会从函数返回任何结果,尽管应该处理旋转。我只是猜测为什么......但我不知道这里发生了什么。
只是目视检查输入,这两种情况并没有那么不同。所以,我应该得到一个类似的变换,但旋转方向相反。
有没有办法解决这个限制?或者,opencv中的替代函数用于相似变换(旋转+缩放+平移)?
(编辑)
也许旋转是最难以理解的参数。我实际上可以自己校正旋转(因为我知道第二和第三点在我的情况下定义角度)并让opencv计算出比例和平移。但这不是一般解决方案。
(编辑2) 包括一点(e.i.,4分)似乎有很多帮助。