【问题标题】:Detecting black images on Android or python在 Android 或 python 上检测黑色图像
【发布时间】:2013-08-11 23:33:19
【问题描述】:

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

【问题讨论】:

标签: android python image-processing


【解决方案1】:

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

使用 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"

【讨论】:

  • 非常好的方法,将尝试在此构建一些基本的裸露检测:)
【解决方案2】:

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

这里有一个计算平均亮度的简单公式:

Formula to determine brightness of RGB color

再加上最小/最大范围可以告诉您图像是否大部分为黑色。直方图在这里也可能有帮助,但您可能不需要完整的直方图。这一切都可以在手机上用 Java 轻松计算出来。

如果你想变得非常漂亮,你可以进行统计计算,然后告诉用户它不够亮。然后进行亮度调整,为他们标准化图像。这是一个非常简单的过程:

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

然后对其运行图像统计信息,看看它是否有助于调整图像以使其可以上传。

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      在 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 将图像转换为灰度甚至可能更简单,然后您只返回一个值用于统计。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-05-15
        • 2020-02-01
        • 2012-02-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-31
        • 1970-01-01
        相关资源
        最近更新 更多