代码之家  ›  专栏  ›  技术社区  ›  Strae

如何检测图像中的“图像面积”百分比?

  •  2
  • Strae  · 技术社区  · 16 年前

    嗯,用我糟糕的英语很难解释;)

    所以,假设我有一个图像,不管是什么类型的(gif,jpg,png),200x200像素大小(总面积40000像素)

    让我们假设,在这个图像的中间,有一张图片(为了保持示例简单,假设假设是平方画),100x100像素(总面积10000像素)。

    我需要知道图像中小正方形填充的面积百分比。

    在上面的例子中,结果应该是25%

    :这是两个图像作为示例(gimped oin the way;):

    alt text

    alt text

    我需要知道整个图像中青椒的百分比(即400x400)

    4 回复  |  直到 7 年前
        1
  •  4
  •   John La Rooy    16 年前
    from PIL import Image
    image = Image.open("pepper.png")
    bg = image.getpixel((0,0))
    width, height = image.size
    bg_count = next(n for n,c in image.getcolors(width*height) if c==bg)
    img_count = width*height - bg_count
    img_percent = img_count*100.0/width/height
    

    两幅图的平均值均为7.361875

        2
  •  0
  •   Community Mohan Dere    9 年前

    我假设周围区域只有一种颜色,图像中的物体可以有任何形状(所以你需要先找出它的坐标,对吗?)

    1. 存储图像大小(40000像素)

    2. -trim (说明 here

    this question . 不过,我很肯定这已经在PHP中实现了。

        3
  •  0
  •   ChristopheD    16 年前

    original thread 此处):

     from PIL import ImageChops
    
     def trim(im, border):
         bg = Image.new(im.mode, im.size, border)
         diff = ImageChops.difference(im, bg)
         bbox = diff.getbbox()
         if bbox:
             return im.crop(bbox)
         else:
             # found no content
             raise ValueError("cannot trim; image was empty")
    

    width * height (修剪前后)。

        4
  •  0
  •   Charles Merriam    16 年前

    这有点取决于你的精度要求和背景色在图像中的存在。考虑这个恼人的测试案例:

    • 做一个400磅的大“G”。
    • 使文本为白色。点击“阴影”或“轮廓”,使其被黑色包围。
    • 把它放在白色背景上。

    选择您的努力:

    • 你可以得到一个边界框,它严重高估了“G”的大小,因为
    • 有更快的方法,更复杂。

    http://www.pythonware.com/products/pil/