将ARFrame捕获的图像转换为UIImage方向问题

2024-01-08

我想检测球并让 AR 模型与其交互。我使用 opencv 进行球检测并发送球中心,我可以在其中使用hitTest获取坐标sceneView。我一直在转换CVPixelBuffer to UIImage使用以下函数:

static func convertToUIImage(buffer: CVPixelBuffer) -> UIImage?{
    let ciImage = CIImage(cvPixelBuffer: buffer)
    let temporaryContext = CIContext(options: nil)
    if let temporaryImage = temporaryContext.createCGImage(ciImage, from: CGRect(x: 0, y: 0, width: CVPixelBufferGetWidth(buffer), height: CVPixelBufferGetHeight(buffer)))
    {
        let capturedImage = UIImage(cgImage: temporaryImage)
        return capturedImage
    }
    return nil
}

这给了我旋转图像:

然后我发现可以使用以下方法更改方向:

let capturedImage = UIImage(cgImage: temporaryImage, scale: 1.0, orientation: .right)

虽然设备处于纵向时它给出了正确的方向,但将设备旋转到横向时再次给出了旋转的图像。

现在我正在考虑使用处理它viewWillTransition。但在此之前我想知道:

  1. 是否有其他方法可以以正确的方向转换图像?
  2. 为什么会发生这种情况?

1.是否有其他方法可以将图像转换为正确的方向?

您可以尝试使用snapshot() of ARSCNView(继承自SCNView), 哪个:

绘制视图的内容并将它们作为新的图像对象返回

所以如果你有一个像这样的对象:

@IBOutlet var arkitSceneView:ARSCNView!

你只需要这样做:

let imageFromArkitScene:UIImage? = arkitSceneView.snapshot()

2、为什么会出现这种情况?

这是因为CVPixelBuffer来自ARFrame,即:

由运行的 AR 会话从设备摄像头(连续)捕获。

好吧,由于相机方向不会随着设备的旋转而改变(它们是分开的),为了能够将框架的方向调整到当前视图,您应该应用仿射重新调整从相机捕获的图像的方向变换提取为displayTransform(for:viewportSize:):

返回仿射变换,用于在标准化图像坐标和适合在屏幕上渲染相机图像的坐标空间之间进行转换。

你可能会找到很好的文档here https://developer.apple.com/documentation/arkit/arframe/2923543-displaytransform,用法示例:

let orient = UIApplication.shared.statusBarOrientation
let viewportSize = yourSceneView.bounds.size
let transform = frame.displayTransform(for: orient, viewportSize: viewportSize).inverted()
var finalImage = CIImage(cvPixelBuffer: pixelBuffer).transformed(by: transform)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将ARFrame捕获的图像转换为UIImage方向问题 的相关文章

随机推荐

  • 多参数url模式django 2.0

    我想在我的 url 模式中传递两个参数 但我收到错误无反向匹配 即 项目 虽然它只使用一个参数就可以正常工作 这是主要网址文件 urlpatterns path admin admin site urls path r materials
  • 使用apache poi 3.7多次写入xlsx文档时出现异常

    我在尝试编写时遇到以下异常 xlsx使用 Apache POI 文件 org apache xmlbeans impl values XmlValueDisconnectedException 看来问题出在第二次使用 write 方法 使用
  • 通过 ajax 调用加载 google 图表

    我试图在点击链接后调用谷歌图表 这就是我的函数的样子 function getGraphData id var ajax url
  • 为特定设备创建用户分段并在 Endeca 中分配内容项

    在 endeca 中 我想向特定用户显示特定内容项 意思是如果用户登录用户我想显示一些产品 横幅 插槽 如果用户是匿名用户 未记录在用户中 那么我想显示一些其他页面 在 atg 中我们可以通过配置文件找出用户类型 但在 endeca 中我该
  • Sailsjs。在 sails-mongo (mongodb) 上创建(和管理)索引的最佳方法

    我使用的是 sailsjs 0 12 它支持index属性上models 还 我正在使用 npm 包Sails hooks mongoat https www npmjs com package sails hook mongoat创建反向
  • 仅显示表中有限数量的行

    我试图限制显示的行数 table 我只需要显示所获取的任意数量的记录中的 2 行 表格末尾有一个小按钮 单击该按钮将显示其余记录 Here s a sample screenshot of how the table will look l
  • 在 GLSL 中选择立方体贴图的面

    好的 我试图了解如何使用提供的坐标选择立方体贴图的面textureCube 从规格中 我收集了定义面部的最大幅度的坐标 例如这些坐标 0 2 0 7 0 65 会选择立方体贴图的 Y 面 但是这些 0 2 0 3 0 8 将选择 Z 面 我
  • 目录 XSL

    Problem 我正在制作一个目录 其中包含章节 小节 小节和小节 我想要的是使用 xsl 处理信息 即 XML 格式 将其转换为 HTML 页面 XML
  • Nuxt.js 中的无限动态级别嵌套

    我希望 nuxt js 的路由完全动态 因为我无法预测用户及其对他想要的级别数量的偏好 因此 一个用户会创建一个如下所示的页面 http localhost parent level 1 level 2 http localhost par
  • javascript:console.log 在这种情况下不起作用?

    function fn openlayers function mapElementId options alert console log console log options 我试图扩展 javascript 库中的功能 但令我惊讶的
  • 不知道从哪里开始使用可变向量

    我正在尝试使用 Data Vector 包在 Haskell 中做类似的事情 但我真的不知道从哪里开始 我是 Haskell 的新手 对某些核心概念的掌握很薄弱 但我正在做到这一点 我想要做的事情可以用以下 C 代码大致表达 float a
  • 单个控制器/操作的 MVC 身份验证绕过

    我正在使用带有表单身份验证的 MVC 并且我需要对我的控制器之一进行身份验证绕过 是否可以绕过控制器 操作的身份验证 我已经经历过ASP NET MVC Forms 身份验证和未经身份验证的控制器操作 https stackoverflow
  • Agora 云录音无法启动

    我正在关注Agora 云录音 RESTful api https docs agora io en cloud recording cloud recording api rest platform All 20Platforms 问题是
  • Python - 如何使用复杂的目录结构使用 PYTHONPATH?

    考虑以下文件 目录结构 project django project init py django app1 init py utils init py bar1 py django app2 init py bar2 py scripts
  • 如何编写 .htaccess 文件以使 CodeIgniter URL 路由工作?

    我正在使用 CodeIgniter 运行 LAMP 环境 我希望能够使用它的 URL 模式 例如 http localhost controller function ID 但默认情况下它必须是http localhost index ph
  • gitlab runners 工件:zip 中没有父文件夹的子文件夹和文件

    我有一个名为 public 的文件夹 其中包含子文件夹 带有子文件夹和文件等 和文件 例如 public folder1 file1 txt folder2 p file1 txt p file2 txt 这些文件夹和文件应作为 gitla
  • HttpAuthorizer 中的 Android Pusher 请求正文实现

    我是推手新手 我已经在我的应用程序中成功实现了公共频道订阅 我目前停留在 Android 私人频道订阅上 我们应该在服务器的 post 端点中传递请求正文参数 在我的 iOS 应用程序中 我们正在创建自定义授权程序以在 PusherOpti
  • 我应该静态还是动态链接到 Visual Studio C 运行时?

    我读过双方关于在 Visual Studio 项目中应该静态还是动态链接到 C 运行时库的争论 但我仍然不完全确定该怎么想 我的项目引入了一些第三方库 Python HDF5 Trilinos 和 Microsoft MPI 每个库都必须使
  • 调用 free 后内存使用量不会减少

    我有一个使用 C 语言的 WebSocket 服务器 它将作为 Windows 上的后台进程运行 并且此进程将接受包含大图像数据 base64 格式 的请求 每次收到请求时 都会使用 malloc 分配内存 并在请求执行后释放 但当我检查任
  • 将ARFrame捕获的图像转换为UIImage方向问题

    我想检测球并让 AR 模型与其交互 我使用 opencv 进行球检测并发送球中心 我可以在其中使用hitTest获取坐标sceneView 我一直在转换CVPixelBuffer to UIImage使用以下函数 static func c