Kil*_*sh9 9 android android-camera android-5.0-lollipop camera2
我试图在我的应用程序中以30秒的曝光时间捕获图像(我知道这可能是因为相机允许它).
但是SENSOR_INFO_EXPOSURE_TIME_RANGE(它应该是以纳秒为单位)给出了我的范围:
13272 - 869661901
Run Code Online (Sandbox Code Playgroud)
它会在几秒钟内完成
0.000013272 - 0.869661901
Run Code Online (Sandbox Code Playgroud)
这显然不到一秒钟.
如何使用更长的曝光时间?
提前致谢!.
rcs*_*ner 20
你的问题的答案:
你不能.您检查了正确的信息并正确解释了它.您为曝光时间设置的任何值都将被剪切为该最大值.
你想要的答案:
但是,你仍然可以通过假装得到你想要的东西.你想要30个连续秒的光子落在传感器上,这是你无法得到的.但是你可以通过累积30秒的光子以及散布的微小缺失间隔来获得(几乎)无法区分的东西.
在高层次上,你需要做的是建立一个List的CaptureRequestS和它传递给CameraCaptureSession.captureBurst(...).这将以尽可能短的间隙时间拍摄.当每帧图像数据可用时,将其传递到某处的某个新缓冲区并累积信息(简单的逐点加法).使用Allocation输出Surface和一些RenderScript 可能最合适.
数据格式说明:
在正确的做到这一点的方法是使用的RAW_SENSOR,如果你能输出格式.这样,累积输出实际上与整个30s内入射到传感器的光成正比.
如果您不能使用它,出于某种原因,我建议使用YUV_420_888输出,并确保将色调映射曲线设置为线性(遗憾的是,您必须通过创建具有两个点的曲线手动执行此操作).否则引入的非线性将破坏我们的方案.(虽然我不确定简单的加法是否恰好在线性YUV空间中,但它至少是第一种方法.)无论你使用这种方法还是RAW_SENSOR,你可能想要在积累后应用你自己的伽玛曲线/色调图使它"看起来正确".
因为皮特的爱不使用JPEG输出,出于多种原因,其中最重要的是,这很可能会在曝光之间增加很多间隙时间,从而破坏我们在连续曝光时近似30秒.
关于暴露等效的注意事项:
这几乎可以产生你想要的曝光,但并不完全.它有两种不同之处.
在这一段曝光时间的中间会有少量的光子信息丢失期.但是在你所谈论的时间尺度上(30s),在这里缺少几毫秒的光线,这是微不足道的.
如果你拍摄了30秒的真实单次曝光,图像会略显黯淡.这是因为每次从实际传感器读出像素值时,都会在信息中添加一点电子噪声.因此,最终你会有35倍的这种加性噪音(从你的特定问题的35次曝光)到单次曝光.对此没有办法,对不起,但它甚至可能都不会引人注意 - 相对于有意义的摄影信号,这通常相当小.这取决于相机传感器的质量(和ISO,但我想这个应用程序你需要高.)
(额外奖励!)这种曝光在某种程度上实际上是优越的:在30秒曝光下可能已经饱和(纯白色)的区域仍将保留在这些更短的曝光中的清晰度,因此基本上保证不会失去你的高端细节.:-)
| 归档时间: |
|
| 查看次数: |
4012 次 |
| 最近记录: |