我想从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时,它至少向右旋转。它似乎有点偏离,就像旋转太远了一样。
答案 0 :(得分:1)
你的问题是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]
如果在进行此更改后问题仍然存在(您的问题表明您已尝试过),那么您需要发布更多信息。正如您所说,问题可能出在您的坐标系的原点,但没有任何关于您的起源的信息,没有人能够帮助您。