所以,让我说我有一个图像,无论什么样的(gif,jpg,png)200x200像素大小(总面积40000像素)
此图像具有背景,可以是透明的,或每种颜色(但我事先知道背景颜色)。
让我们说在这张图片的中间,有一张图片(为了保持示例简单,假设是一个正方形),100x100像素(总面积10000像素)。
我需要知道图像内部填充小方块的面积百分比。
所以,我知道完整的图像大小和背景颜色,在php / python中有一种方法可以扫描图像并检索它(简而言之,计算与给定背景不同的像素)? / p>
在上面的例子中,结果应为25%
编辑:这是两个图片为例(gimped oin the way;):
alt text http://www.freeimagehosting.net/uploads/5ea3aed4e3.png
alt text http://www.freeimagehosting.net/uploads/73a72bd6aa.png
我需要知道整个图像中青椒的百分比(即400x400)
答案 0 :(得分: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
答案 1 :(得分:0)
我假设周围区域只有一种颜色,图像中的物体可以有任何形状(所以你需要先查找它的坐标,对吗?)
如果你可以使用ImageMagick,那很简单。
图像的存储大小(40000像素)
使用-trim
将图像发送到ImageMagick并修剪周围区域(说明here)
将生成的图像(10000像素)的大小与原始图像的大小进行比较
如果您无法使用ImageMagick,则必须使用GD来裁剪周围区域。 this question的答案中有一个粗略的描述。我很确定这已经在PHP中实现了。
答案 2 :(得分:0)
使用Python和PIL(Python Imaging Library),您可以尝试以下方法(未经测试 - 此处的信用额转到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
(修剪前后)进行计算。
答案 3 :(得分:0)
这取决于您的准确度要求以及图像中是否存在背景颜色。考虑这个烦人的测试用例:
选择你的努力:
您通常可以使用PIL(Python Imaging Library)http://www.pythonware.com/products/pil/从文件格式访问原始图像数据。