我试图了解PIL getbbox(获取边界框)函数,其中"计算图像中非零区域的边界框。"
在下面的代码中,我使用了getbbox,它使用简单的灰度图像返回了我期望的结果。
import numpy as np
from PIL import Image, ImageFont, ImageDraw, ImageEnhance,ImageChops
import PIL
def trim(im):
dr = ImageDraw.Draw(im)
bg = Image.new(im.mode, im.size, im.getpixel((0,0)))
diff = ImageChops.difference(im, bg)
bbox = diff.getbbox()
#None if getbbox returns None
if bbox:
return im.crop(bbox)
但我不了解它的工作原理是否符合其source code。除了self.load()之外,它似乎还会对自身进行某种递归调用。我认为递归函数需要终止条件,但我没有看到?
我觉得它与以某种方式删除图像阵列中的黑色像素有关,但我不理解这些看似神秘的2行代码(下图)。任何帮助我理解这一点将不胜感激。
def getbbox(self):
"""
Calculates the bounding box of the non-zero regions in the
image.
:returns: The bounding box is returned as a 4-tuple defining the
left, upper, right, and lower pixel coordinate. If the image
is completely empty, this method returns None.
"""
self.load()
return self.im.getbbox()
编辑:粘贴在源代码中
答案 0 :(得分:0)
如前所述,这不是递归。 im.getbbox()调用https://github.com/python-pillow/Pillow/blob/master/src/_imaging.c#L1947
然后调用ImagingGetBBox-https://github.com/python-pillow/Pillow/blob/master/src/libImaging/GetBBox.c#L24