如何检测图像中的“图像区域”百分比?

3 投票
4 回答
4056 浏览
提问于 2025-04-15 20:19

嗯,用我糟糕的英语来解释有点难;)

假设我有一张图片,类型不重要(可以是gif、jpg、png),大小是200x200像素(总共40000个像素)。

这张图片有一个背景,背景可以是透明的,也可以是任何颜色(但我事先知道背景颜色)。

假设在这张图片的中间,有一幅图案(为了简单起见,我们假设是一个画出来的正方形),大小是100x100像素(总共10000个像素)。

我需要知道这个小正方形在整张图片中占的面积百分比。

所以,我知道整张图片的大小和背景颜色,是否有办法用php或python扫描这张图片,找出这个百分比呢?简单来说,就是计算那些与给定背景颜色不同的像素数量。

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

编辑:这里有两张图片作为例子(稍微处理过;):

alt text

alt text

我需要知道整张图片中绿色椒椒的百分比(整张图片是400x400)。

4 个回答

0

你可以使用Python和PIL(Python图像库)来尝试以下方法(这个方法还没有经过测试,感谢原始讨论帖的贡献):

 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(在裁剪之前和之后)来进行计算。

0

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

如果你可以使用ImageMagick,那就简单了。

  1. 先记录下图片的大小(40000像素)

  2. 把图片发送给ImageMagick,然后用 -trim 来裁剪周围的区域(详细说明可以在 这里 找到)

  3. 比较裁剪后图片的大小(10000像素)和原始图片的大小

如果你不能使用ImageMagick,那就得用GD来裁剪周围的区域。大致的描述可以在对 这个问题 的回答中找到。不过,我很确定这个功能在PHP中已经实现过了。

4
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。

撰写回答