如何检测图像中的“图像区域”百分比?
嗯,用我糟糕的英语来解释有点难;)
假设我有一张图片,类型不重要(可以是gif、jpg、png),大小是200x200像素(总共40000个像素)。
这张图片有一个背景,背景可以是透明的,也可以是任何颜色(但我事先知道背景颜色)。
假设在这张图片的中间,有一幅图案(为了简单起见,我们假设是一个画出来的正方形),大小是100x100像素(总共10000个像素)。
我需要知道这个小正方形在整张图片中占的面积百分比。
所以,我知道整张图片的大小和背景颜色,是否有办法用php或python扫描这张图片,找出这个百分比呢?简单来说,就是计算那些与给定背景颜色不同的像素数量。
在上面的例子中,结果应该是25%。
编辑:这里有两张图片作为例子(稍微处理过;):
我需要知道整张图片中绿色椒椒的百分比(整张图片是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
(在裁剪之前和之后)来进行计算。
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。