使用python检测图像上的白色背景

时间:2016-05-02 12:09:10

标签: python image-processing color-detection

有没有办法判断图像是否是使用python的白色背景?什么是一个很好的策略来获得关于这个问题的“信心百分比”?似乎互联网上的文献并没有涵盖这种情况,我找不到任何严格相关的内容。

我想要分析的图像是典型的电子商务网站产品图片,因此它们应该只在中间有一个聚焦对象,而在边界只有白色背景。

可用的另一个信息是对象应占据的图像空间的最大百分比。

2 个答案:

答案 0 :(得分:3)

我会选择这样的东西。

  1. 通过制作最亮,最白的像素(如240而不是255)来降低图像的对比度,这样通常在图像中和产品内部发现的白色不再是纯白色。

  2. 在图像周围放置一个1像素宽的白色边框 - 这将允许下一步中的填充“流动”一直围绕边缘(即使 “product”触摸框架的边缘)和“seep”从所有边框/边缘进入图像。

  3. Floofdill你的图像从左上角开始(在步骤2之后必须是纯白色)并且在匹配白色时允许10-20%的容差,以防背景灰白或略微阴影,白色将在边缘流入您的图像,直到它到达中心的产品。

  4. 查看您现在拥有的纯白色像素数 - 这些是背景颜色。纯白色像素的百分比将为您提供图像在白色背景上作为产品的信心指示。

  5. 我会从命令行使用ImageMagick,如下所示:

    convert product.jpg +level 5% -bordercolor white -border 1 \
      -fill white -fuzz 25% -draw "color 0,0 floodfill" result.jpg
    

    我会在下面两张照片周围放一个红色边框,这样你就可以看到StackOverflow白色背景上的边缘,并显示前后图像 - 看看生成图像中的白色数量(没有第二个,因为它没有白色背景),也在路由器下的阴影下看到-fuzz的效果。

    <强>之前

    enter image description here

    <强>后

    enter image description here

    如果你想要百分比,你可以将所有非白色像素设为黑色,然后像这样计算白色像素的百分比:

    convert product.jpg -level 5%                                      \
       -bordercolor white -border 1                                    \
       -fill white -fuzz 25% -draw "color 0,0 floodfill" -shave 1      \
       -fuzz 0 -fill black +opaque white -format "%[fx:int(mean*100)]" info:
    62
    

    enter image description here

    <强>之前

    enter image description here

    <强>后

    enter image description here

    ImageMagick具有Python绑定,因此您可以在Python中执行上述操作 - 或者您可以使用OpenCV和Python来实现相同的算法。

答案 1 :(得分:0)

最流行的图片格式为.png。 PNG图像可以具有透明色(alpha)。经常与白色背景页面匹配。使用pillow很容易找出哪些像素是透明的。

一个很好的起点:

from PIL import Image

img = Image.open('image.png')
img = img.convert("RGBA")

pixdata = img.load()

for y in xrange(img.size[1]):
    for x in xrange(img.size[0]):
        pixel = pixdata[x, y]
        if pixel[3] == 255:
           # tranparent....

或者,如果你检查左上角的像素是否为白色就足够了:

pixel = pixdata[0, 0]
if item[0] == 255 and item[1] == 255 and item[2] == 255:
   # it's white