26

まったく同じサイズの2つの画像があります。私がやろうとしているのは、1つを取り、50%透明にして、次のように直接重ねるだけです。

import Image

background = Image.open("bg.png")
overlay = Image.open("over.png")

background = background.convert("RGBA")
overlay = overlay.convert("RGBA")

background_pixels = background.load()
overlay_pixels = overlay.load()

for y in xrange(overlay.size[1]):
    for x in xrange(overlay.size[0]):
         background_pixels[x,y] = (background_pixels[x,y][0], background_pixels[x,y][1], background_pixels[x,y][2], 255)

for y in xrange(overlay.size[1]):
    for x in xrange(overlay.size[0]):
         overlay_pixels[x,y] = (overlay_pixels[x,y][0], overlay_pixels[x,y][1], overlay_pixels[x,y][2], 128)

background.paste(overlay)
background.save("new.png","PNG")

しかし、私が得るのは50%透明なオーバーレイだけです(その半分です!)。

4

5 に答える 5

34

past()の代わりにblend()を使用してみてください-paste()は、元の画像を貼り付けている画像に置き換えるだけのようです。

try:
    from PIL import Image
except ImportError:
    import Image

background = Image.open("bg.png")
overlay = Image.open("ol.jpg")

background = background.convert("RGBA")
overlay = overlay.convert("RGBA")

new_img = Image.blend(background, overlay, 0.5)
new_img.save("new.png","PNG")
于 2012-05-17T17:01:25.280 に答える
15

多分古すぎる質問、を使用して簡単に行うことができますopencv

cv2.addWeighted(img1, alpha, img2, beta, gamma)
#setting alpha=1, beta=1, gamma=0 gives direct overlay of two images

ドキュメントリンク

于 2017-06-25T19:31:01.437 に答える
0

オーバーレイアルファマスクパラメータを指定して、期待どおりの結果が得られるかどうかを確認します。

background.paste(overlay, overlay.size, overlay)
于 2014-06-02T21:48:53.123 に答える
0

ここでのスクリプトは、blendを使用してタスクを実行します。また、現在ではない場合に同じサイズになるように画像のサイズを変更する機能もあります。

于 2019-05-16T06:11:49.667 に答える
0

それらを同じ形状にサイズ変更する場合:

b_h, b_w, b_ch = background.shape
W = 800
imgScale = W/b_w
new_b_h,new_b_w = int(b_h*imgScale), int(b_w*imgScale)
new_background = cv2.resize(background,(new_b_w, new_b_h))

次に、背景と前景の両方に適合する図形を入力できます。

square= np.zeros((new_b_h, new_b_w, b_ch), np.uint8)
square.fill(255)
x= new_b_w
y= new_b_h
offset =0
square[int(y - new_b_h) - offset:int(y)- offset, int(x-new_b_w)- offset:int(x)- offset] = new_background 

これで、オーバーレイできます。

OPACITY = 0.7
added_image = cv2.addWeighted(new_background,OPACITY,square, 1-OPACITY, 0)

詳細はgithubにあります

于 2019-10-29T23:37:47.613 に答える