gpt4 book ai didi

opencv - 如何将 4x4 矩阵转换为 3x3 矩阵?

转载 作者:太空宇宙 更新时间:2023-11-03 21:09:40 24 4
gpt4 key购买 nike

我正在 iOS 上编写 AR 应用程序,并在 UIView 上使用 CATransform3D 转换。

通过 OpenCV,我可以通过调用 cvGetPerspectiveTransform() 获得透视矩阵。这将返回一个 3x3 矩阵。

我不记得我是在哪里找到它的,但我有执行以下操作的示例代码:

//the opencv transform matrix is put into map_matrix
cvGetPerspectiveTransform (src_pnt, dst_pnt, map_matrix);

CATransform3D t = CATransform3DIdentity;

// map over the CATransform3D 4x4 matrix from the opencv 3x3 matrix
t.m11 = cvmGet(map_matrix,0,0);
t.m12 = cvmGet(map_matrix,1,0);
t.m14 = cvmGet(map_matrix,2,0);
t.m21 = cvmGet(map_matrix,0,1);
t.m22 = cvmGet(map_matrix,1,1);
t.m24 = cvmGet(map_matrix,2,1);
t.m41 = cvmGet(map_matrix,0,2);
t.m42 = cvmGet(map_matrix,1,2);
t.m44 = cvmGet(map_matrix,2,2);

myView.layer.transform = t;

但是,应用此表单会使我的 View 变得疯狂并到处跳动。通过一些试验,我发现只有这三种映射在某种程度上起作用:

t.m14 = cvmGet(map_matrix,2,0); //left and right transform
t.m24 = cvmGet(map_matrix,2,1); //up and down transform
t.m21 = cvmGet(map_matrix,0,1); //some kind of skew?

我一直在阅读 3d 图形和变换数学,但这是一项相当艰巨的任务。

4x4 矩阵与 3x3 矩阵的正确映射是什么?

谢谢!

最佳答案

可能有不同的问题:

首先,您应该尝试矩阵的逆(以防您获得的转换实际上是从目标到源)。使用 mat.inv(),或交换发送给 getPerspectiveMatrix 的参数。

如果它不能解决您的问题,您必须将 3x3 矩阵分解为旋转和平移并将其组合成一个 4x4 矩阵。一个近似的解决方案是删除最后一行和第三列(对应于 3D 旋转)——但这只是一个粗略的近似。

另请查看这篇关于创建透视变换矩阵的非常好的帖子 Opencv virtually camera rotating/translating for bird's eye view

关于opencv - 如何将 4x4 矩阵转换为 3x3 矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7927300/

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