#3【Python】PILで2枚の画像を合成する
《目次》
《内容》
今回はPythonの画像処理ライブラリ「PIL」を使用し2枚の画像を合成してみたいと思います.
画像は以下のサイトを利用させていただきました.
www.pakutaso.com
以下の画像を合成していきたいと思います.
《プログラム》
from PIL import Image #File OPEN img1 = Image.open("img1.jpg") img2 = Image.open("img2.jpg") #convert rgb_im1 = img1.convert('RGB') rgb_im2 = img2.convert('RGB') #size size1 = rgb_im1.size size2 = rgb_im2.size img1n = Image.new('RGB',size1) img2n = Image.new('RGB',size2) #min_size min_sizex = min(size1[0],size2[0]) min_sizey = min(size1[1],size2[1]) size3 = [min_sizex,min_sizey] img4_1 = Image.new('RGB',size3) img4_2 = Image.new('RGB',size3) img4_3 = Image.new('RGB',size3) #min合成 for x in range(min_sizex): for y in range(min_sizey): r1,g1,b1 = img1.getpixel((x,y)) r2,g2,b2 = img2.getpixel((x,y)) r3 = min(r1,r2) g3 = min(g1,g2) b3 = min(b1,b2) img4_1.putpixel((x,y),(r3,g3,b3,0)) #max合成 for x in range(min_sizex): for y in range(min_sizey): r1,g1,b1 = img1.getpixel((x,y)) r2,g2,b2 = img2.getpixel((x,y)) r3 = max(r1,r2) g3 = max(g1,g2) b3 = max(b1,b2) img4_2.putpixel((x,y),(r3,g3,b3,0)) #avg合成 for x in range(min_sizex): for y in range(min_sizey): r1,g1,b1 = img1.getpixel((x,y)) r2,g2,b2 = img2.getpixel((x,y)) r3 = int((max(r1,r2)+min(r1,r2))/2) g3 = int((max(g1,g2)+min(g1,g2))/2) b3 = int((max(b1,b2)+min(b1,b2))/2) img4_3.putpixel((x,y),(r3,g3,b3,0)) img4_1.show() img4_1.save("min.png") img4_2.show() img4_2.save("max.png") img4_3.show() img4_3.save("avg.png")
《結果》
《プチ解説》
※min合成,max合成,avg合成などの名前は私が勝手につけた名前です.
「min合成」
min合成は2枚の画像の各RGBを比べて小さい方を入力しています.
例えば,(R,G,B)の順で,
1枚目(90,120,200)+2枚目(200,70,90)=min(90,70,90)
のような感じです.
画像だけ見ると1枚目が強く出ているようです.
「max合成」
max合成は2枚の画像の各RGBを比べて大きい方を入力しています.
例えば,(R,G,B)の順で,
1枚目(90,120,200)+2枚目(200,70,90)=max(200,120,200)
のような感じです.
画像だけ見ると2枚目が強く出ているようです.
「avg合成」
最後はmaxとminを足して割る2しています.と思いましたが,これ無駄な処理ですね(笑)
おそらく,(r1+r2)/2,(g1+g2)/2,(b1+b2)/2と同じ結果になるのでは.
この画像が,THE合成という感じですね.
また,画像のサイズですが,2枚の画像の縦横の小さい方をとって合成後のサイズとしています.
例えば,(x,y)の順で,
1枚目(1200,1500)+2枚目(1000,1800)=min(1000,1500)
のような感じです.大きい方をとるとout of rangeのエラーが出ました.
処理を変えれば解決できると思います.
《今後の課題》
さまざまな合成ができると分かったので,いろいろ試してみたいと思います.
今回は以上です.長くなりましたが,最後まで見てくださった方がいましたらありがとうございます.