さて久々の画像加工の回です

opencvを用いると簡単に画像の加工ができます。



解説動画はこちら




はいそれではまず最初に
opencvを使うにはライブラリを読み込みましょう。

インストールしていない方は
pip などでインストールしてみてください。

まず最初に画像を加工する関数を作ります。

アニメ画像みたいな加工をする関数を作ります。
def anime_filter(img, K= 20):
    gray = cv2.cvtColor(img, cv2.COLOR_BGRA2GRAY)
    edge = cv2.blur(gray, (13, 13))
    edge = cv2.Canny(edge, 10, 40, apertureSize=3) 
    edge = cv2.cvtColor(edge, cv2.COLOR_GRAY2BGR)
    img = np.array(img/K, dtype=np.uint8)
    img = np.array(img*K, dtype=np.uint8)
    return cv2.subtract(img, edge)
これで画像をアニメ風にします。

やっていることはエッジの抽出とぼかしです

次にモザイク処理する関数を作ります。

def mosaic(src,ratio=0.07):
    img = src.copy()
    x, y, w, h = 0, src.shape[0]//3,src.shape[1],src.shape[0]//3
    tmp = img[y:y + h, x:x + w]
    small = cv2.resize(tmp, None, fx=ratio, fy=ratio, interpolation=cv2.INTER_NEAREST)
    img[y:y + h, x:x + w] = cv2.resize(small, tmp.shape[:2][::-1], interpolation=cv2.INTER_NEAREST)
    return img

モザイクはopencvのresize機能で実現できます。
この関数で画像の一部分にだけ
モザイク処理をすることができます。

はい
それでは実際に画像に処理してみましょう。

画像は4枚使用しますが
画像はご自身で用意して下さいね。

img1_path = 'smap/sawaziri.png'
img2_path = 'smap/makky.png'
img3_path = 'smap/ASKA.png'
img4_path = 'smap/pierre.png'
paths = [img1_path,img2_path,img3_path,img4_path]

fig = plt.figure(figsize=(20,16))

for i,(path,A) in enumerate(zip(paths,['S','M','A','P'])):
    ax = fig.add_subplot(1, 4, i+1)
    img = cv2.imread(path)
    anime = anime_filter(img)
    mos = mosaic(anime)
    cv2.putText(mos, A, (mos.shape[1]//2, mos.shape[0]//4), 
                cv2.FONT_HERSHEY_PLAIN, 4, (255, 255, 255), 5, cv2.LINE_AA)
    ax.imshow(cv2.cvtColor(mos, cv2.COLOR_BGR2RGB))
    ax.set_xticks([])
    ax.set_yticks([])
plt.show()

実行した結果は
・・・・・


download


はいこのようになりました。
アニメっぽくして
モザイクをかけて
文字を追加しております!!!!

S
M
A
P
で始まる方々を
画像加工してみました。

はい
ということで
opencvを用いると
簡単に画像加工をすることができるので
皆さんも試してみて下さいね

今回はここまでです
それでは