web-dev-qa-db-ja.com

2つの同じサイズの画像をPython

私はまったく同じ寸法の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%の透明なオーバーレイだけです(そのため、途中までです!)。

14
joedborg

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

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")
16
egor83

おそらく古すぎる質問です。opencvを使用して簡単に行うことができます

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

ドキュメントリンク

8
rainversion_3

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

background.paste(overlay, overlay.size, overlay)
0
dolphin

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

0
Relative0

それらを同じ形状にサイズ変更したい場合:

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 にあります

0
Alex B