【问题标题】:ARCore – Image from arFragment is different from the fragment's displayARCore – 来自 arFragment 的图像与片段的显示不同
【发布时间】:2019-03-23 05:11:36
【问题描述】:

我正在我的一个项目中使用 ARCore。我在视图中使用arFragment。从那以后,我使用

arFragment.getArSceneView().getArFrame().acquireCameraImage()

返回一个image。此图像和片段显示中的预览不同。我认为我通过 AR 片段看到的是通过acquireCameraImage 捕获的内容,但看起来获取的图像比片段显示的部分更多,而且方向是横向的(片段显示中的纵向视图)。

我需要一个与片段显示中的预览相同的图像对象。
有什么办法可以得到吗?

【问题讨论】:

  • 你怎么知道它们不同?请发布比较图片和您的清单的活动声明。

标签: java kotlin augmented-reality arcore sceneform


【解决方案1】:

正如您所写的那样——公共方法.acquireCameraImage() 从相机中获取与当前帧相对应的图像:

public Image acquireCameraImage()

为了在片段的显示中获得与预览相同的图像对象,只需使用:

public Frame update()

Google ARCore 开发者文档

update() method 更新ARCore 系统的状态。这包括:接收新的相机帧、更新设备的位置、更新跟踪锚点的位置、更新检测到的平面等。此调用可能会导致屏幕外的 OpenGL 活动。因此,为避免不必要的帧缓冲区刷新和重新加载,不应在渲染帧或屏幕外缓冲区的中间进行此调用。此调用可能会更新所有创建的锚点和检测到的平面的位姿。可通过getUpdatedTrackables(Class) 访问更新的对象集。阻塞模式下的这个调用(参见 Config.UpdateMode)将等到有新的相机图像可用,或者直到达到内置超时(当前为66ms)。如果相机图像在内置超时时间内没有到达,那么update() 将返回最新的 Frame 对象。对于某些应用程序,了解是否实际获得了新帧可能很重要(例如,如果相机没有产生新帧,则避免重绘)。为此,请将通过getTimestamp() 获得的当前帧的时间戳与之前记录的帧时间戳进行比较。如果它们不同,则这是一个新框架。

【讨论】:

  • 谢谢你的回答..!!我使用生成的位图的缩放和旋转解决了这个问题。但是很难找到纵横比。
  • 嗨@AngathanNesarasa,如何将横向图像转换为从acquireCameraImage() 接收的纵向图像。可以给我代码吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-19
  • 1970-01-01
  • 2013-02-14
相关资源
最近更新 更多