如何知道图像是否太暗以至于需要使用 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
我在一个使用 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