【发布时间】:2012-04-16 12:24:09
【问题描述】:
我想通过从给定图像中删除前 30 行和后 30 行来裁剪图像。我已经搜索但没有得到确切的解决方案。有人有什么建议吗?
【问题讨论】:
标签: python python-imaging-library crop
我想通过从给定图像中删除前 30 行和后 30 行来裁剪图像。我已经搜索但没有得到确切的解决方案。有人有什么建议吗?
【问题讨论】:
标签: python python-imaging-library crop
有一个crop()方法:
w, h = yourImage.size
yourImage.crop((0, 30, w, h-30)).save(...)
【讨论】:
Parameters: box – The crop rectangle, as a (left, upper, right, lower)-tuple.
您需要为此导入 PIL (Pillow)。 假设你有一个大小为 1200、1600 的图像。我们将图像从 400、400 裁剪到 800、800
from PIL import Image
img = Image.open("ImageName.jpg")
area = (400, 400, 800, 800)
cropped_img = img.crop(area)
cropped_img.show()
【讨论】:
更简单的方法是使用来自ImageOps 的裁剪。您可以输入要从每一侧裁剪的像素数。
from PIL import ImageOps
border = (0, 30, 0, 30) # left, top, right, bottom
ImageOps.crop(img, border)
【讨论】:
(left,upper,right,lower)表示两点,
对于800x600像素的图片,图片的左上点为(0, 0),右下点为(800, 600)。
因此,将图像切成两半:
from PIL import Image
img = Image.open("ImageName.jpg")
img_left_area = (0, 0, 400, 600)
img_right_area = (400, 0, 800, 600)
img_left = img.crop(img_left_area)
img_right = img.crop(img_right_area)
img_left.show()
img_right.show()
Python 图像库使用笛卡尔像素坐标系,左上角为 (0,0)。请注意,坐标指的是隐含的像素角;被寻址为 (0, 0) 的像素的中心实际上位于 (0.5, 0.5)。
坐标通常作为 2 元组 (x, y) 传递给库。矩形表示为 4 元组,首先给出左上角。例如,覆盖所有 800x600 像素图像的矩形写为 (0, 0, 800, 600)。
【讨论】: