我的 iphone 应用程序使用 AVFoundation 的 AVCaptureSession 从相机捕获实时数据。我可以在运行时访问它的委托方法中的数据并从中创建图像。它可以是 CGImage、UIImage 或只是原始数据 (CMSampleBufferRef)。
我要做的是计算该数据(图像)的亮度和亮度。或者它可以是一些其他值,可以指示我输入光的亮度。
有没有标准的方法来获得这个值?也许使用 OpenGL。
提前致谢。
我的 iphone 应用程序使用 AVFoundation 的 AVCaptureSession 从相机捕获实时数据。我可以在运行时访问它的委托方法中的数据并从中创建图像。它可以是 CGImage、UIImage 或只是原始数据 (CMSampleBufferRef)。
我要做的是计算该数据(图像)的亮度和亮度。或者它可以是一些其他值,可以指示我输入光的亮度。
有没有标准的方法来获得这个值?也许使用 OpenGL。
提前致谢。
只需将您的图像转换为YUV 格式并计算亮度通道的平均值。颜色转换是一种典型的操作,任何像样的图像处理框架都支持它。例如,OpenCV(你说的是 OpenGL,但这实际上与图像处理没有任何关系,我假设你的意思是 OpenCV)有CvtColor。
如果您手边没有这样的框架但可以访问像素强度,则可以使用以下等式:
Y' = 0.299*R + 0.587*G + 0.144*B
得到亮度通道,然后计算平均值。R、G 和 B 分别代表红色、绿色和蓝色通道。
编辑
请注意,您的相机可能会通过修改其光圈来补偿亮/暗场景。这取决于相机,但我认为大多数相机都会这样做 - 否则您的照片最终可能会饱和(纯白色)或纯黑色 - 在任何一种情况下都是无用的。人的眼睛其实也做同样的事情。
缺点是仅通过查看图像很难判断您是处于黑暗还是明亮的环境中。在这种情况下,您可能必须超越图像并查询相机。理论上,您可以直接通过驱动程序(不太可能)或通过查看图像元数据(例如,使用 JPEG,有EXIF)来执行此操作。
最后,您还没有说出您想知道的亮度到底是什么。如果是整体场景,那么平均就足够了。如果它是场景的一部分,你可能需要做一些更聪明的事情。让我们知道是否是这种情况。