如何知道图像是否太暗以至于需要使用 OpenCv 进行闪光

How to know if an image is too dark that it needs flash using OpenCv

我在一个使用 OpenCV 的 Android 项目中工作,我正在使用一个表面来实现我自己的相机,因为我想向用户提供有关他们正在拍摄的照片的反馈,以帮助他们提高它的质量。我想做的是检测他们将要拍摄的图像有多暗,并建议他们使用闪光灯。提前致谢。

如果您可以控制相机的参数,请考虑在使用闪光灯之前对其进行调整。如果您想要 x2 全局曝光因子,您可以:

  • 曝光时间乘以2
  • 将光圈值(或f-number)除以sqrt(2)
  • gain乘以2(这会增加一些噪音)

现在回答问题,如果您已经知道如何使用 OpenCV 访问图像中的像素,我首先建议您使用 cvtColor 将其转换为灰度,然后您可以计算(对于每个图像)像素强度的总和(cv::sum)并定义一个阈值,在该阈值下图像是 "too dark".

伪代码示例(这个应该根据你的needs/application提炼):

while sum(pixels) < threshold
   it_nb=0
   exp_time += 0.1 (second)
   if it_nb>fixed_limit or if (exp_time/gain cannot be increased anymore)
      print 'use flash'      
      break