确定图像亮度/亮度

kra*_*ter 7 iphone opencv image-processing brightness

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

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

有没有标准的方法来获得这个价值?也许使用OpenGL.

提前致谢.

mpe*_*kov 13

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

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

Y' = 0.299*R + 0.587*G + 0.144*B
Run Code Online (Sandbox Code Playgroud)

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

编辑

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

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

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