我想采用 OpenCV 中的仿射矩阵:
Mat T = getAffineTransform(src_pt, dst_pt);
然后将其转换为 CGAffineTransform 以在 Core Graphics/Objective-C/iOS 中使用。 (CGAffineTransform 文档 https://developer.apple.com/library/mac/#documentation/graphicsimaging/reference/CGAffineTransform/Reference/reference.html)
我试过了:
CGAffineTransform t = CGAffineTransformIdentity;
t.a = T.at<float>(0,0);
t.b = T.at<float>(0,1);
t.c = T.at<float>(1,0);
t.d = T.at<float>(1,1);
t.tx = T.at<float>(0,2);
t.ty = T.at<float>(1,2);
这对于 x 和 y 平移效果很好,但如果矩阵中有任何旋转则不行。似乎缺少了一些东西,因为生成的图像似乎奇怪地倾斜了。我尝试过乘法.b
and .c
通过 -1 并切换.b
and .c
,但这些似乎都不起作用。图像仍然出现不正确的倾斜。
编辑:我应该提到的是almost正确旋转。当我切换 b 和 c 时,它至少朝正确的方向旋转。它看起来有点偏离,因为旋转得有点太远了。
你的问题是 opencv 是行主要而 CGAffineTransform 是你想要的列主要
t.a = T.at<float>(0,0);
t.b = T.at<float>(1,0);
t.c = T.at<float>(0,1);
t.d = T.at<float>(1,1);
你可以看出,因为在文档中 CGAffineTransform 采用以下形式
[a b 0
c d 0
tx ty 1]
请注意,tx 和 ty 位于底行。在标准行主矩阵中,平移分量位于最右边的列中
[a c tx
b d ty
0 0 1]
如果进行此更改后问题仍然存在(您的问题表明您已经尝试过),那么您需要发布更多信息。正如您所建议的,问题可能出在坐标系的原点,但如果没有有关原点的任何信息,没有人能够帮助您。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)