确定图像亮度/亮度

时间:2011-02-02 15:30:24

标签: iphone image-processing opencv brightness

我的iphone应用程序使用AVFoundation的AVCaptureSession从相机捕获实时数据。我能够在运行时访问它的委托方法中的数据,并从中创建一个图像。它可以是CGImage,UIImage或只是原始数据(CMSampleBufferRef)。

我要做的是计算该数据(图像)的亮度,亮度。或者它可以是一些其他值,可以指示我输入光的亮度。

是否有任何标准方法可以获得此值?也许使用OpenGL。

提前致谢。

1 个答案:

答案 0 :(得分:13)

只需将图片转换为YUV format并计算亮度通道的平均值即可。颜色转换是一种典型的操作,任何体面的图像处理框架都支持它。例如,OpenCV(你说OpenGL,但实际上与图像处理无关,我假设你的意思是OpenCV)有CvtColor

如果您没有这样的框架,但可以访问像素强度,您可以使用等式:

Y' = 0.299*R + 0.587*G + 0.144*B

获取亮度通道,然后计算平均值。 R,G和B分别代表红色,绿色和蓝色通道。

修改

请注意,相机可能会通过修改光圈来补偿亮/暗场景。这取决于相机,但我认为大多数相机都会这样做 - 否则你的照片最终可能会饱和(纯白色)或纯黑色 - 无论哪种情况都没用。实际上是人眼do the same thing

缺点是,仅通过查看图像很难判断您是处于黑暗或光线环境中。在这种情况下,您可能必须超出图像并查询相机。理论上,您可以直接通过驱动程序(不太可能)或者通过查看图像元数据(例如使用JPEG,EXIF)来执行此操作。

最后,你还没有说出你想知道它的亮度究竟是什么。如果是整个场景,那么平均值就足够了。如果它是场景的某些部分,你可能需要做一些更智能的事情。如果是这种情况,请告诉我们。