【问题标题】:Determining Image Luminance/Brightness确定图像亮度/亮度
【发布时间】:2011-06-20 01:33:34
【问题描述】:

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

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

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

提前致谢。

【问题讨论】:

    标签: iphone image-processing opencv brightness


    【解决方案1】:

    只需将您的图像转换为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)来执行此操作。

    最后,你还没有说你想知道的亮度到底是什么。如果是整体场景,那么平均就足够了。如果它是场景的一部分,你可能需要做一些更聪明的事情。让我们知道是否是这种情况。

    【讨论】:

    • 谢谢,我想这必须工作。我会试一试并在此处发布结果。
    • 看看我编辑的评论——我发现了一个潜在的问题以及一些可以解决的方法。
    • 是的,这确实有效:获取像素信息将其拆分为颜色强度,然后计算 Y,如您在此处所示。由于我需要小(快速)光脉动的平均亮度值,然后相机才能适应它,所以这种方法效果很好。再次感谢。
    • @misha:你能告诉我计算亮度通道平均值的正确方法吗?我被困在这里很长时间了。
    • 提取luma通道,将提取的luma通道的所有像素相加,除以总像素数。有什么问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-03
    • 2020-04-29
    • 2018-10-24
    • 2018-03-22
    • 1970-01-01
    • 2019-03-26
    • 1970-01-01
    相关资源
    最近更新 更多