以下适用于 Android 操作系统。
我正在尝试使用相机估计手机所在房间的黑暗(或光)。
这个想法是相机可以返回一定的亮度水平,我可以用它来确定手机周围的光量。
我的问题很简单:我如何使用相机(无论是前置后置相机)来获得这个亮度(“光量”)?
提前致谢。
以下适用于 Android 操作系统。
我正在尝试使用相机估计手机所在房间的黑暗(或光)。
这个想法是相机可以返回一定的亮度水平,我可以用它来确定手机周围的光量。
我的问题很简单:我如何使用相机(无论是前置后置相机)来获得这个亮度(“光量”)?
提前致谢。
以下是在光传感器上注册监听器的方法:
private final SensorManager mSensorManager;
private final Sensor mLightSensor;
private float mLightQuantity;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Obtain references to the SensorManager and the Light Sensor
mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
mLightSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
// Implement a listener to receive updates
SensorEventListener listener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
mLightQuantity = event.values[0];
}
}
// Register the listener with the light sensor -- choosing
// one of the SensorManager.SENSOR_DELAY_* constants.
mSensorManager.registerListener(
listener, lightSensor, SensorManager.SENSOR_DELAY_UI);
}
编辑:感谢@AntiMatter 的建议更新。
如果您想使用相机,例如,如果其他传感器不可用,那么我会
然后我会计算图像亮度的直方图并从右(最亮)到左(最暗)工作,直到你找到高于 N 的第一个有效值,这将决定你的场景亮度。
说了这么多,我不会这样做,因为您需要测试很多异常情况。
当然不确定您的用例是什么,如果您使用它来调整汽车的“亮度”,那么前置摄像头会受到前灯等的影响。
无论如何有趣的问题,但似乎需要做很多工作才能获得如此少的收益,尤其是大多数像样的硬件都具有这些传感器
我的回答可能对答案来说太不完整了,但我喜欢这里的格式。
另外,我的回答不是开玩笑的,所以不要马上停止阅读。
当然,首先你得拍张照片。然后你必须定义“亮度”。我没有这样做的算法,但我猜类似的事情已经完成了。也许是这样的:
确定哪些像素值是亮的,哪些是暗的,哪些介于两者之间(并且它们中的每一个都可以具有可变的亮度)。然后,您必须将该算法应用于您的照片以获得亮度值。
是的,这是一个非常简短(35,000 英尺)的问题视图,但它应该给你一些关于从哪里开始的想法。
[编辑]
这是一个开始的地方(传感器的 android 文档)
[/编辑]
Using the camera is pointless, since the camera will adjust the exposure time and aperture to the surrounding light, so that the recorded images will have very similar overall brightness independent of the actual available light (at least in an ideal world).
The Android API offer functionality in the SensorManager to access the hardware sensors (you are interested in the sensor of type TYPE_LIGHT). I am not sure however, if you can rely on access to these sensors through the API, although they may (or may not) be present.
想要降低亮度的关键是弄清楚 HTC 在他们的 camera.apk 中是如何做到的。因为股票的 Android 相机应用程序对于过度曝光来说是可怕的,尤其是对于 DINC。