PIL 镜像坐标

2 投票
1 回答
2802 浏览
提问于 2025-04-17 15:37

我有一张用PIL(Python图像库)创建的图片。

import Image
import ImageDraw

img = Image.new("RGB", (400,400), "white")
draw = ImageDraw.Draw(img)

coords = [(100,70), (220, 310), (200,200)]
dotSize = 2

for (x,y) in coords:
    draw.rectangle([x,y,x+dotSize-1,y+dotSize-1], fill="black")

现在我想编辑这张图片,把每个坐标点做一个对角线镜像效果,放在同一张图片上。

请问有没有什么方法可以做到这一点?我想要这样的效果!https://i.stack.imgur.com/hLL15.jpg

1 个回答

3

你可以使用PIL库里的transposerotatecomposite这几个函数来实现你想要的效果。这些函数都在Image模块里。

我稍微修改了一下最初的图片,这样结果会更清晰。首先,我把每个点的大小增大了一些,让它们更显眼。

下面的代码首先展示了最初的图片,并在上面叠加了一个选取区域的遮罩,这个遮罩选择了从左上角到右下角对角线以下的部分。

enter image description here

接着,它展示了原始图片和镜像图片的合成效果。

enter image description here

import Image
import ImageDraw

imsize = 400
img = Image.new("L", (imsize,imsize), "white")
draw = ImageDraw.Draw(img)

coords = [(100,70), (220, 310), (200,200), (80,20)]
dotSize = 50

for (x,y) in coords:
    draw.rectangle([x,y,x+dotSize-1,y+dotSize-1], fill="black")

## mirror image along the diagonal
img2 = img.rotate(90).transpose(Image.FLIP_TOP_BOTTOM)

## mask
mask = Image.new("L", (imsize,imsize), "black")
maskdraw = ImageDraw.Draw(mask)
# draw a triangle on the mask dividing the image along the diagonal
maskdraw.polygon([(0,0),(0,imsize),(imsize,imsize)], fill="white")

# show the mask overlaid on the original image
Image.blend(mask, img, 0.5).show()

# compute and show the blended result
img3 = Image.composite(img, img2, mask)
img3.show()

撰写回答