gpt4 book ai didi

ios - 将OpenCV的findHomography透视矩阵转换为iOS的CATransform3D

转载 作者:可可西里 更新时间:2023-11-01 05:13:53 26 4
gpt4 key购买 nike

我想采用从 OpenCV 的 findHomography 返回的透视变换矩阵函数并将其(在 C++ 或 Objective-C 中)转换为 iOS 的 CATransform3D。我希望它们在 Core Graphics 端准确再现“扭曲”效果方面尽可能接近。示例代码将不胜感激!

来自 iOS 的 CATransform3D.h:

/* Homogeneous three-dimensional transforms. */

struct CATransform3D
{
CGFloat m11, m12, m13, m14;
CGFloat m21, m22, m23, m24;
CGFloat m31, m32, m33, m34;
CGFloat m41, m42, m43, m44;
};

类似问题:

Apply homography matrix using Core Graphics

convert an opencv affine matrix to CGAffineTransform

最佳答案

免责声明

我从来没有尝试过这个,所以对它持保留态度。

CATransform3D 是一个 4x4 矩阵,它对 3 维齐次向量 (4x1) 进行运算以生成另一个相同类型的向量。我假设在渲染时,由 4x1 向量描述的对象将每个元素除以第 4 个元素,而第 3 个元素仅用于确定哪些对象出现在哪些对象之上。假设这是正确的...

推理

findHomography 返回的 3x3 矩阵对二维齐次向量进行运算。该过程可以分为 4 个步骤

  1. 单应性的第一列乘以x
  2. 单应性的第二列乘以y
  3. 单应性第三列乘以1
  4. 生成的第一个和第二个向量元素除以第三个

您需要在 4x4 向量中复制此过程,我假设结果向量中的第 3 个元素对您的目的没有意义。

解决方案

像这样构造你的矩阵(H 是你的单应矩阵)

[H(0,0), H(0,1), 0, H(0,2),
H(1,0), H(1,1), 0, H(1,2),
0, 0, 1, 0
H(2,0), H(2,1), 0, H(2,2)]

这显然满足1,2和3。4满足,因为齐次元素总是最后一个。这就是为什么“同质行”如果你不得不被撞到一行。第3行的1是让向量的z分量不受干扰地通过。

以上所有内容都是在行主要符号(如 openCV)中完成的,以尽量避免混淆。您可以查看 Tommy 的回答,了解转换为专栏专业的方式(您基本上只是转置它)。但是请注意,目前汤米和我对如何构建矩阵存在分歧。

关于ios - 将OpenCV的findHomography透视矩阵转换为iOS的CATransform3D,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14467724/

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