我有一个应用程序可以计算给定照片的照度。
我的问题是:我找不到计算这个照度指数(以勒克斯为单位)的方法
我可以用这个代码得到luminosity :
UIImage* image = [UIImage imageNamed"image.png"];
unsigned char* pixels = [image rgbaPixels];
double totalLuminance = 0.0;
for(int p=0;p<image.size.width*image.size.height*4;p+=4) {
totalLuminance += pixels[p]*0.299 + pixels[p+1]*0.587 + pixels[p+2]*0.114;
}
totalLuminance /= (image.size.width*image.size.height);
totalLuminance /= 255.0;
NSLog(@"Image.png = %f",totalLuminance);
Source
但结果在 0 和 1 之间,我想我不能用 lux 中的 illuminance 计算 >
寻找堆栈溢出的答案我找到了这个答案 https://stackoverflow.com/a/2720635/839049女巫给了我一个方向,但我不知道如何进行,因为我不知道如何处理曝光。
.. you can just ignore the pixel data and just use the exposure information as a light meter. ...
怎么样?有谁知道我该怎么做?
还是有更好的方法?
Best Answer-推荐答案 strong>
如果你从 Exif 数据中知道曝光值,那么总的场景照度可以计算为
pow(2, Exposure)*(0.3 * Calibration);
不幸的是,校准取决于您所成像场景的物理特征。如果您有很多深色、低反射率的物体,则必须将常数设置得更高。
通常,曝光计算得出的结果是,您从公式中获得的平均照度,即所有 Y 值的总和除以像素数,约为 0.5(但这取决于相机的“大脑”:一些相机将场景划分为“区域”并对每个区域应用不同的权重,例如,即使这意味着使边缘变暗,它们也会尝试在中心区域获得 0.5;最新的相机集成了对比度值,以便从他们推断为“感兴趣的区域”)。
这意味着您的图像将始终被“缩放”,除非您以某种方式指示相机以固定速度拍照并停止设置,而不以任何方式进行补偿。如果这样做,您将能够使用平均像素亮度来确定总表观照度。
不过,您始终必须使用已知仪表校准结果。
关于ios - 查找从相机拍摄的图像的照度值,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/11563182/
|