我的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分别代表红色、绿色和蓝色通道。
编辑
请注意,您的相机可能会通过修改光圈来补偿明亮/黑暗的场景。这取决于相机,但我认为大多数相机都会这样做--否则,您的照片可能会变得过曝(纯白)或纯黑--无论哪种情况都是无用的。人眼实际上也是这样做的do the same thing。
缺点是仅仅看图像很难判断您是否处于黑暗或明亮的环境中。在这种情况下,您可能需要超越图像并查询相机。理论上,您可以通过驱动程序直接进行此操作(不太可能),或者通过查看图像元数据(例如,在JPEG中,有EXIF)进行操作。
最后,您没有说明您想了解亮度的确切内容。如果是整个场景,则平均值就足够了。如果是场景的某个部分,则可能需要做一些更聪明的事情。如果是这种情况,请告诉我们。