def seam_carve(img):
"""
Seam carve image
:param img: PIL image object
:return: PIL image object
"""
# Convert to skimage image
img_to_convert = img.copy()
img_to_convert = pil_to_skimage(img_to_convert)
# Energy Map, used to determine which pixels will be removed
eimg = filters.sobel(color.rgb2gray(img_to_convert))
# (height, width)
img_dimensions = img_to_convert.shape
# Squish width if width >= height, squish height if height > width
# Number of pixels to keep along the outer edges (5% of largest dimension)
# Number of seams to be removed, (1 to 10% of largest dimension)
if img_dimensions[1] >= img_dimensions[0]:
mode = "horizontal"
border = round(img_dimensions[1] * 0.05)
num_seams = random.randint(1, round(0.1*img_dimensions[1]))
else:
mode = "vertical"
border = round(img_dimensions[0] * 0.05)
num_seams = random.randint(1, round(0.1*img_dimensions[0]))
try:
img_to_convert = transform.seam_carve(img_to_convert, eimg, mode, num_seams, border)
except Exception as e:
print("Unable to seam_carve: " + str(e))
# Convert back to PIL image
img_to_convert = skimage_to_pil(img_to_convert)
return img_to_convert
评论列表
文章目录