2

PIL を使用して作成したイメージがあります

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://imgur.com/Q6LLhmk

4

1 に答える 1

3

PILtransposeと関数を使用して、目的の結果を得るrotateことができます。compositeこれらはすべて画像モジュールにあります。

結果をより明確にするために、最初の画像を少し変更しました。手始めに、ドットを目立たせるために各ドットのサイズを大きくしました。

以下のコードは、最初に、左上から右下の対角線の下にある画像の半分を選択するマスクでオーバーレイされた最初の画像を示しています。

ここに画像の説明を入力してください

次に、元の画像と鏡像の合成を示します。

ここに画像の説明を入力してください

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()
于 2013-02-12T12:55:08.263 に答える