今話題沸騰中の
カイロ大学の卒業証書っぽい画像を作ってみましょう。

解説動画はこちら



 今回の画像加工はopencvを用います。

インストールなどしていない方は
インストールが必要です。

早速やり方をみてみましょう。

まずは画像を適当にWEBから拾って来ます。
・証書の土台となる写真の画像
・上に貼り付ける写真の画像

この2つを用意します。

やっていることは簡単。
ベースの証書画像の上に証明写真用の画像を
貼り付けているだけです。

コードはこんな感じになります。
import cv2
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
%matplotlib inline

# 画像の読み込み
img = cv2.imread('ベース画像のパス')
img2 = cv2.imread('証明写真のパス')

# 貼り付ける画像をリサイズ(サイズはうまく調整してね)
x_i2 , y_i2 = 180 , 200
img2 = cv2.resize(img2,(x_i2 , y_i2))

# 貼り付け先のオフセットを設定して貼り付ける(ここの数値も調整してね)
x_off , y_off = 100 , 170
img[y_off:y_off+y_i2 , x_off:x_off+x_i2] = img2

# 描画
plt.figure(figsize=(20,16))
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.show()

こんな感じになりました。
スクリーンショット 2020-06-28 15.24.01


これだと、証明写真を貼っただけなので
スタンプが無いですねーー。

スタンプも押さないと
それっぽくならないので
スタンプも押します。

別途スタンプの画像を透過PNGで用意して
上から貼り付けます。

# 画像の読み込み
img = cv2.imread('ベース画像のパス')
img2 = cv2.imread('証明写真のパス')
rogo = cv2.imread('ロゴ画像のパス',-1)

# 顔写真のリサイズと貼り付け(数値はうまく調整してね)
x_i2 , y_i2 = 180 , 200
img2 = cv2.resize(img2,(x_i2 , y_i2))
x_off , y_off = 100 , 170
img[y_off:y_off+y_i2 , x_off:x_off+x_i2] = img2

# 背景をPIL形式に変換
back = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
back = Image.fromarray(back).convert('RGBA')

# rogoをPIL形式に変換(数値はうまく調整してね)
x_i3 , y_i3 = 150,150
rogo = cv2.resize(rogo,(x_i3 , y_i3))
rogo = cv2.cvtColor(rogo, cv2.COLOR_BGRA2RGBA)
rogo = Image.fromarray(rogo).convert('RGBA')

# 画像を合成
location = (40,280)
tmp = Image.new('RGBA', back.size, (255, 255, 255, 0))
tmp.paste(rogo, location, rogo)
img = Image.alpha_composite(back, tmp)

# 描画
plt.figure(figsize=(20,16))
plt.imshow(img)
plt.show()

さて出来上がりは・・・
スクリーンショット 2020-06-28 15.24.21


いい感じにロゴもスタンプされていますね!!

画像の合成にはopencvはとても便利です。

暇な方は遊んでみるととても面白いですよ!
それでは。