【发布时间】:2013-01-18 08:16:07
【问题描述】:
我想从 OpenCV 获取仿射矩阵:
Mat T = getAffineTransform(src_pt, dst_pt);
然后将其转换为 CGAffineTransform 以在 Core Graphics/Objective-C/iOS 中使用。 (CGAffineTransform docs)
我试过了:
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 和.c 乘以-1 并切换.b 和.c,但这些似乎都不起作用。图像仍然出现不正确的倾斜。
编辑:我应该提到它几乎旋转正确。当我切换 b 和 c 时,它至少朝正确的方向旋转。它看起来有点不对劲,因为旋转得有点过头了。
【问题讨论】:
-
我很惊讶切换
b和c不起作用,因为这会导致正确的旋转。您发布的代码当前构造了不正确的旋转。 -
是的,我试过
t.b = T.at<float>(1,0)和t.c = T.at<float>(0,1)但没有运气。我认为这可能与起源有关。
标签: opencv matrix core-graphics transformation cgaffinetransform