gpt4 book ai didi

opencv - 将 opencv 仿射矩阵转换为 CGAffineTransform

转载 作者:太空宇宙 更新时间:2023-11-03 23:02:22 25 4
gpt4 key购买 nike

我想使用我从 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 时,它至少在正确的方向上旋转。它似乎有点偏离,因为旋转有点太远了。

最佳答案

您的问题是 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]

如果进行此更改后问题仍然存在(您的问题表明您已经尝试过了),那么您需要发布更多信息。正如您所建议的那样,问题可能出在您的坐标系原点,但如果没有任何关于您的原点的信息,没有人能够帮助您。

关于opencv - 将 opencv 仿射矩阵转换为 CGAffineTransform,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14387806/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com