在Android或python上检测黑色图像

时间:2011-12-28 18:19:35

标签: android python image-processing

我有一个Android应用程序,其中包含用户提供的图像。有很多用户向后端应用程序提交黑色或非常暗的图像,我想过滤掉。最佳解决方案是过滤手机上已有的图像,并通知用户更多光线并重新拍摄照片。如果更容易实现的另一个解决方案是在python中编写的后端过滤它。我看了一下opencv,但我真的不知道从哪里开始。有关在Android和/或python中获取信息以测量图像亮度/颜色的任何提示吗?

4 个答案:

答案 0 :(得分:7)

您可以尝试使用图像的直方图作为第一个近似值。

使用PIL的示例,如果存在更多“暗”像素(灰度表示中的前128个值)而不是“浅”像素,则会提醒您:

import Image

img = Image.open('m.jpg')  
gsimg = im.convert(mode='L')
hg = gsimg.histogram()
# count should be 256 most/all of the time (an index for each shade of grey)
count = len(hg)

if sum(hg[:count/2]) > sum(hg[count/2:]):
  print "the image is too dark"

答案 1 :(得分:2)

我可能会考虑计算一些关于图像的简单统计数据。你真的不需要opencv来正确地做到这一点。我会考虑平均亮度和图像的变化。

这是一个做平均亮度的简单公式:

Formula to determine brightness of RGB color

加上一系列最小/最大值可以告诉您是否有大部分黑色图像。直方图也可能有用,但您可能不需要完整的直方图。这一切都可以通过手机在Java中轻松计算出来。

如果你想真正想要你可以进行统计数据计算,并告诉用户它不够亮。然后进行亮度调整以使图像标准化。这是一个非常简单的过程:

http://en.wikipedia.org/wiki/Normalization_(image_processing)

然后在其上运行图像统计,并查看它是否有助于调整图像,以便允许上传图像。

答案 2 :(得分:0)

在Python中,您可以使用PIL进行基本图像分析。

http://effbot.org/imagingbook/imagestat.htm

是ImageStat模块的文档。用法如:

from PIL import Image,ImageStat
im = Image.open("bride.jpg")
stat = ImageStat.Stat(im)

现在各种各样的'stat'会告诉你图像的红色,绿色和蓝色条带。对于暗图像,您希望它们较低,因此请检查stat.mean的值,如果它们低于某些截止值,则声明图像为暗。你必须自己制作一些样本图像,看看你得到了什么样的价值。

[编辑]

使用ImageOps.grayscale将图像转换为灰度可能更简单,然后只返回一个值用于统计。

答案 3 :(得分:0)

如何将图像转换为灰度图像,计算灰度图像的平均颜色,过滤掉图像而不是超过某个阈值?