我有一个Android应用程序,用户使用前置摄像头拍摄自己的照片,然后将照片上传到我的服务器。我注意到许多照片来到我的服务器太暗(有时几乎不可能看到用户脸上的清晰)。
我想在应用程序端过滤掉这些照片并显示通知(例如“照片太暗。再拍一张照片”)给用户。我怎样才能在Android中完成这样的任务?
修改
我已经找到了如何计算单个像素的亮度(感谢这个答案:source code):
IOException
但我仍然不清楚如何确定整个图像亮度“状态”。有什么建议吗?
答案 0 :(得分:9)
作为变体,您可以构建照片的亮度直方图。按照此处Formula to determine brightness of RGB color所述计算亮度。然后初始化大小为256的数组,并将一个数组元素递增一个数组,该索引是每个像素的亮度。
然后查看左侧或右侧的值是否太多,这意味着您的图片太亮/太暗。例如,您可以查看10个左右值。
代码示例:
int histogram[256];
for (int i=0;i<256;i++) {
histogram[i] = 0;
}
for (int x = 0; x < a.getWidth(); x++) {
for(int y = 0; y < a.getHeight(); y++) {
int color = a.getRGB(x, y);
int r = Color.red(pixel);
int g = Color.green(pixel);
int b = Color.blue(pixel);
int brightness = (int) (0.2126*r + 0.7152*g + 0.0722*b);
histogram[brightness]++;
}
}
int allPixelsCount = a.getWidth() * a.getHeight();
// Count pixels with brightness less then 10
int darkPixelCount = 0;
for (int i=0;i<10;i++) {
darkPixelCount += histogram[i];
}
if (darkPixelCount > allPixelCount * 0.25) // Dark picture. Play with a percentage
else // Light picture.