【问题标题】:How to set infinity focus in camera2 api, android?如何在camera2 api,android中设置无限远焦?
【发布时间】:2021-03-12 22:38:41
【问题描述】:

我想在使用外部鱼眼镜头时将自定义相机焦距设置为无限远,这就是我目前所做的:

builder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_OFF);
builder.set(CaptureRequest.LENS_FOCUS_DISTANCE, 0.0f);

但结果是如此模糊。

我使用的是三星 S6 和 Nexus 5。 外置镜头广角170度。

谁能帮忙?

【问题讨论】:

  • 你试过修改FOCUS_RANGE吗?
  • 不,我没有。我会试试的

标签: android android-camera2


【解决方案1】:

如果您只是在谈论使用内置相机的镜头来实现鱼眼,那么您应该使用的最低值是:

float minFocalDist = cameraCharacteristics.get(CameraCharacteristics.LENS_INFO_MINIMUM_FOCUS_DISTANCE);

如果您使用的是外部镜头,那么我认为正确的方法实际上是在相机上使用自动对焦,因为它应该对焦到鱼眼镜头的焦距......我认为。所以外部镜头负责鱼眼,内部负责自动对焦。但是,如果这不起作用,那么看看将焦距设置为超焦距时会得到什么。这个距离可能不是最佳的,但在大多数情况下它应该可以工作......

float hyperFocalDist = cameraCharacteristics.get(CameraCharacteristics.LENS_INFO_HYPERFOCAL_DISTANCE);

【讨论】:

  • 我刚刚尝试过超焦距。它返回0.2,结果与0.0几乎相同
  • 这似乎是一个对齐问题。超焦距应该几乎总是有效的。可能是外部镜头的轴与相机轴不完全对齐。这需要非常精确,如果你只是盯着连接,你可能会得到不好的结果。是否有专用的适配器可以将镜头连接到手机上?
  • 这是一个手机壳,镜头安装在正确的位置
  • 好吧,在这种情况下,您知道相机的焦距必须在[0.0f,android.lens.info.minimumFocusDistance]范围内。您应该在此范围内尝试几个值,以了解哪个距离是最佳的。事实证明,相机的焦距需要超出支持的范围才能使鱼眼聚焦(这真的很糟糕)。您基本上可以通过确定最佳焦距出现在 0 或 android.lens.info.minimumFocusDistance 来确定这一点。
  • 您最后是不是手动调整了值?或者是什么问题...
【解决方案2】:

对于任何在这里谷歌搜索的人, Android CameraX,CameraCharacteristics.LENS_INFO_MINIMUM_FOCUS_DISTANCE 等相机特性。

对于 2021 年,语法类似于 ...

所以,你已经完成了获取相机的过程......

theCamera = cameraProvider.bindToLifecycle((LifecycleOwner)this,
              yourCameraSelector, yourImageAnalysis, yourPreview);

现在的代码是:

CameraCharacteristics camChars = Camera2CameraInfo
   .extractCameraCharacteristics(theCamera.getCameraInfo());
float discoveredMinFocusDistance = camChars
   .get(CameraCharacteristics.LENS_INFO_MINIMUM_FOCUS_DISTANCE);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-17
    • 1970-01-01
    • 2023-03-25
    • 2015-08-23
    相关资源
    最近更新 更多