OpenCV 的 iPhone 6 相机校准

2023-12-23

我正在使用 OpenCV 开发 iOS 增强现实应用程序。我在创建相机投影矩阵以允许 OpenGL 叠加层直接映射到标记顶部时遇到问题。我觉得这是因为我的 iPhone 6 摄像头没有根据应用程序正确校准。我知道有 OpenCV 代码可以使用棋盘校准网络摄像头等,但我找不到校准我的嵌入式 iPhone 摄像头的方法。

有办法吗?或者 iPhone 6 有已知的预估价格吗?其中包括:x 和 y 中的焦距、x 和 y 中的主点以及畸变系数矩阵。

任何帮助将不胜感激。

EDIT:

推导值如下(使用iPhone 6,摄像头分辨率1280x720):

fx=1229
cx=360
fy=1153
cy=640

此代码为当前运行 iOS 9.1 的设备提供焦距和主要点的准确估计。

AVCaptureDeviceFormat *format = deviceInput.device.activeFormat;
CMFormatDescriptionRef fDesc = format.formatDescription;
CGSize dim = CMVideoFormatDescriptionGetPresentationDimensions(fDesc, true, true);

float cx = float(dim.width) / 2.0;
float cy = float(dim.height) / 2.0;

float HFOV = format.videoFieldOfView;
float VFOV = ((HFOV)/cx)*cy;

float fx = abs(float(dim.width) / (2 * tan(HFOV / 180 * float(M_PI) / 2)));
float fy = abs(float(dim.height) / (2 * tan(VFOV / 180 * float(M_PI) / 2)));

NOTE:

我遇到了此代码的初始化问题。我建议在初始化并正确设置值后,将它们保存到数据文件中并读取该文件以获取值。


在我的非 OpenCV AR 应用程序中,我使用 iPhone 相机的视场 (FOV) 来构建相机投影矩阵。它可以很好地显示覆盖在相机视图顶部的太阳路径。 我不知道你需要多少准确度。仅了解 FOV 可能还不够。

iOS API 提供了一种获取相机视野的方法。我的理解是这样的:

AVCaptureDevice  * camera = ...
AVCaptureDeviceFormat * format = camera.activeFormat;
float fieldOfView = format.videoFieldOfView;

获得 FOV 后,我计算投影矩阵:

typedef double mat4f_t[16]; // 4x4 matrix in column major order    

mat4f_t projection;
createProjectionMatrix(projection,
                       GRAD_TO_RAD(fieldOfView),
                       viewSize.width/viewSize.height,
                       5.0f,
                       1000.0f);

where

void createProjectionMatrix(
        mat4f_t mout, 
        float fovy,
        float aspect, 
        float zNear,
        float zFar)
{
    float f = 1.0f / tanf(fovy/2.0f);

    mout[0] = f / aspect;
    mout[1] = 0.0f;
    mout[2] = 0.0f;
    mout[3] = 0.0f;

    mout[4] = 0.0f;
    mout[5] = f;
    mout[6] = 0.0f;
    mout[7] = 0.0f;

    mout[8] = 0.0f;
    mout[9] = 0.0f;
    mout[10] = (zFar+zNear) / (zNear-zFar);
    mout[11] = -1.0f;

    mout[12] = 0.0f;
    mout[13] = 0.0f;
    mout[14] = 2 * zFar * zNear /  (zNear-zFar);
    mout[15] = 0.0f;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenCV 的 iPhone 6 相机校准 的相关文章

  • 迁移到 ARC 时如何解决“选择器'performSelector:withObject:afterDelay:'没有已知的实例方法”?

    ARC 迁移工具在开始迁移之前拒绝接受此代码 self delegate performSelector selector overlayDismissed withObject self afterDelay 0 委托被迫使用协议来实现此
  • 在 Visual Studio C++ 2008 中包含 dll

    有没有办法将 dll 包含在项目中 这样我就不必在编译后将这些 dll 与可执行文件放在同一文件夹中 这样我就可以用它们编译我的项目 这是否有可能 如果是 有人可以指导我 我的项目是一个 opencv 项目 有很多 dll 我必须包含在文件
  • 如何防止 RealmSwift 列表中出现重复项?

    如何防止向列表中添加重复项RealmSwift 我有我的User作为领域对象 但真正的数据源是服务器 只是使用领域在本地缓存用户 当我从服务器获取当前用户数据时 我想确保存储在领域中的用户拥有来自服务器的所有播放列表 以及它们的曲目列表等
  • iOS - NSNotificationCenter 多个UIKeyboard通知

    我有两个视图控制器 我们称它们为 A 和 B 1 在 A 中 我显示一个包含文本字段的 popOver 2 B中有一个UITextView用于简单的文本编辑 我必须管理 A 和 B 中的键盘才能滚动键盘隐藏的内容 我知道如何重新定位内容 我
  • 将带有地理位置数据的照片保存到照片库 Swift 3

    如何使用地理位置元数据将照片保存到照片库 我已请求 并允许 应用程序访问用户位置 private func allowAccessToUserLocation locationManager CLLocationManager locati
  • 如何在 Qt 应用程序中通过终端命令运行分离的应用程序?

    我想使用命令 cd opencv opencv 3 0 0 alpha samples cpp cpp example facedetect lena jpg 在 Qt 应用程序中按钮的 clicked 方法上运行 OpenCV 示例代码
  • UITextFieldDelegate 与 UITextField 控件事件

    如果我想处理 UITextField 的更改 例如用户在其中键入 看起来这可以通过将委托分配给该文本字段 然后让委托实现 shouldChangeCharactersInRange 来完成 或者通过将目标添加到文本字段并处理 UIContr
  • 如何从代码隐藏中设置 CarouselView 的项目?

    我有一个 CarouselView 它绑定到图像的 ItemsSource 但我想通过更改 CarouselView 的索引来更改当前显示的图像 我尝试使用 CarouselView Position 作为必须选择的元素的索引 但不幸的是这
  • iOS UIButton 带有圆角和背景 bug

    我发现圆形 UIButton 存在一个奇怪的问题 这是我创建此按钮的代码块 let roundedButton UIButton type System roundedButton frame CGRectMake 100 100 100
  • UISearchController 保留问题

    我正在尝试使用 UISearchController 但是我遇到了无法解决的保留问题 MainTableview 有两个部分 第1节 基于某些正则表达式过滤数据 第2节 All Data 我将 UISearchController 添加到我
  • 无法使用 Xamarin 和 WCF 访问 Web 服务

    我想使用 Xamarin 和 WCF 来使用公共 Web 服务 对于这个演示 我将使用Xamarin iOS 这是我试图使用的 公共 网络服务 http www webservicex net globalweather asmx WSDL
  • 如何使用 Swift 获取 YouTube 频道的所有播放列表?

    我的问题不是关于从一般频道检索视频 我只想获取该频道创建的所有 播放列表 并检索每个播放列表的缩略图 标题和视频数量 这是一个 YouTube 频道示例 正如您所看到的 有很多已创建的播放列表 截至目前 我只能获取某个频道最新上传的视频 在
  • iPhone 快照,包括键盘

    我正在寻找拍摄整个 iPhone 屏幕 包括键盘 的正确方法 我找到了一些截取屏幕的代码 CGRect screenCaptureRect UIScreen mainScreen bounds UIView viewWhereYouWant
  • 使用 UIImageJPEGRepresentation 时,compressionQuality 应该是多少?

    我想对用户库中的照片应用滤镜 然后将其写回磁盘 我在用着UIImageJPEGRepresentation 该函数需要一个UIImage and a compressionQuality值介于 0 0 和 1 0 之间 因为我想保留原始质量
  • 如何将音乐从我的应用程序切换到 iPod

    我在用MusicPlayerController我的应用程序中的对象来播放音乐 我知道当 iPhone ipod 应用程序终止时 可以继续播放我的应用程序音乐 我该怎么做 这涉及到一些事情 您必须在两种音乐播放器之间进行选择 应用程序音乐播
  • Xcode 9 中的“addingPercentEncoding”是否损坏?

    在 Swift 3 x 和 Xcode 9 beta 2 中 使用addingPercentEncoding https developer apple com documentation swift string 1690785 addi
  • 在 iOS 上从 GPS 获取时间

    我正在开发一个跟踪器应用程序 该应用程序需要高精度地了解设备位置 即它使用位置服务并忽略水平精度低于 20 米的位置 CLLocation没有明确声明是否通过 GPS 确定 但是 如果水平精度为 20 米或更好 则可以认为它是来自 GPS
  • 为什么这个 SKPhysicsJointPin 不能将这 2 个精灵保持在一起?

    我显然不太了解 SKPhysicsJoint 但是除了 Apple 文档之外 网上的信息还很少 下面的代码有什么问题 我认为应该保持头部和颈部永久连接 我的意图是它们就像两张带有大头针的纸 这样它们可以旋转一点 但不仅仅是完全分开 当我运行
  • 如何获取 UIWebView 中元素的位置?

    我在 iPad 程序中加载了 html 的 UIWebView 通过使用 webkit column width 我将 html 分为几列 padding 0px height 1024px webkit column gap 0px we
  • KeyboardAvoidingView - 隐藏键盘时重置高度

    我正在使用 React NativeKeyboardAvoidingView设置我的高度View当显示键盘时 但是当我关闭应用程序中的键盘时 视图的高度不会变回原来的值

随机推荐

  • Flask - Active Directory 身份验证[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我制作了一个小型 Flask 应用程序 我希望用户能够使用他们的 Windows NT ID 进行身份验证 我不是 IT 团队的一员
  • 用于独立应用程序 Winforms 的数据库[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • JSlider 标签中的工具提示

    我想创建一个带有标签的 JSlider 其中有一个工具提示 JSlider slider new JSlider JLabel label new JLabel First slider setPaintLabels true Hashta
  • redirect_to 和 render 可以互换吗?

    对于下面的代码 如果将redirect to替换为render会发生什么情况 反之亦然 def create product Product new params product respond to do format if produc
  • 如何使用 Yiinitializr 在 Yii 项目中创建友好链接

    我尝试在我的 Yii 项目中使用 Yiinitializr 站点结构 结构如下 root backend standart yii folders www index php admin mysite com common common f
  • JavaScript 有没有办法检测文件是否可以拖放到所使用的设备上?

    我在网站上创建了一个表单 允许用户上传文件 用户还可以将文件拖放到此表单上 但是 在某些设备上 根本无法拖放files 例如在我的 iPhone 上 因此 我只想仅在有意义的设备上显示文本 将文件拖放到此处 有没有办法原则上检测设备是否支持
  • 将多个值传递给单个 PowerShell 脚本参数

    我有一个脚本 我将 args 中的服务器名称传递给该脚本 这样我就可以使用这个 这些 服务器做一些事情foreach script ps1 host1 host2 host3 foreach i in args Do Stuff i 我想添
  • 自定义视图未触发 OnClickListener

    我创建了一个自定义按钮 它是从 XML 布局中扩展出来的 除了未触发点击侦听器之外 一切正常 我怀疑问题是因为android clickable true 属性 因为当我删除它时 会触发点击侦听器 但我需要设置此属性 因为我的自定义视图使用
  • 如何成功安装pyproj和geopandas?

    我尝试通过运行 pip install geopandas 通过 python 安装 geopandas 但这失败了 python setup py Egg info 失败 错误代码为 1 然后是长目录路径 我在网上读到 geopandas
  • 这种网络抓取行为是否合法? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有与网络抓取相关的问题 不幸的是我在这里或谷歌搜索找不到任何答案 好吧 我可能参与了一个项目 站点 B 但不确定它的合法性 因为对我来说
  • 使用 ANALYZE 从零/从头开始重建 PostgreSQL 统计信息的最快方法是什么?

    我有一个 PostgreSQL v10 数据库 大小约为 100GB 重建统计数据最有效 最快 的方法是什么 例如在主要版本升级之后 ANALYZE如果没有参数 默认情况下会更新整个数据库的统计信息 速度慢得令人痛苦 这看起来像是一个单一的
  • 数据类型 datetime 和 time 在大于或等于运算符中不兼容

    我在数据库表的列中有一个变量类型时间 我如何将java中的这个值与这个字段进行比较我的意思是我可以使用日期 公历吗 我已经尝试过了 但仍然有此消息 请有人给我建议 Date d2 new Date timestamp now Calenda
  • 初学者 Unix shell 脚本问题

    我正在做一项由两部分组成的作业 首先 我们被要求创建一个名为 fileType sh 的 shell 脚本 它能够判断文件是 Windows ASCII 类型还是 其他类型 我已经完成了该部分 并将在下面显示它应该执行的操作的示例 file
  • React Native 中的 URI 与 URL

    在react native中可以这样做 const somePath https
  • 拖放图像视图不起作用

    My RelativeLayout有图像 我只是想让它在整个布局中可拖动 问题是每次我拖放时 它都会回到原始位置 这是我的 拖拽布局 xml
  • 将彩信标记为以编程方式读取

    是否有办法更新彩信 短信数据库以将消息从已读标记为未读 反之亦然 我尝试过使用 URI 但它们对我不起作用 下面的代码可以帮助我更新彩信是否被标记为已查看 要将其用于 SMS 消息 只需将以下 content mms 替换为 content
  • Mod 重写并传递 URL 作为参数

    我在重写 mod 时遇到了一个小问题 我的一个朋友正在编写一个允许您上传图像的脚本 我们想要做的是允许用户将域名附加到直接图像链接 并且脚本将从提供的 URL 检索图像 例如 如果图像位于 http www test com image j
  • SVG 填充子元素的宽度

    我希望我的容器 SVG 元素能够缩放 以适应其子组元素或在溢出时显示滚动条 我想知道是否有一个 css 属性可以做到这一点 例如 如果标记如下所示 div class wrapper style width 500px div
  • 如何使用伪类选择除第一个和最后一个之外的所有子级?

    在 CSS 中 对于下面所示的示例 如何才能将样式应用于除第一个和最后一个段落之外的所有段落 div class entry p p p p p p p p p p div 我已尝试以下方法来排除第一段 但这不起作用 div entry p
  • OpenCV 的 iPhone 6 相机校准

    我正在使用 OpenCV 开发 iOS 增强现实应用程序 我在创建相机投影矩阵以允许 OpenGL 叠加层直接映射到标记顶部时遇到问题 我觉得这是因为我的 iPhone 6 摄像头没有根据应用程序正确校准 我知道有 OpenCV 代码可以使