今回は久しぶりに
画像加工で遊んでみました。

解説動画はこちら



ソースコードはこちら
import numpy as np 
import cv2
import math
from ipywidgets import interact, IntSlider , Select
import matplotlib.pyplot as plt
%matplotlib inline

x1 = IntSlider(value=1, min=1, max=20, step=1, description='x:',)
y1 = IntSlider(value=1, min=1, max=20, step=1, description='y:',)
files = ['kurochan.jpg','nadaru.png','inachan.jpg','ayase.jpg','gakky.jpg']
selected = Select(description='画像', options=files, rows=5,)

def show_plot(col1, col2 , col3):
    img = cv2.imread('img/' + col3)
    (h, w, c) = img.shape
    flex_x = np.zeros((h,w),np.float32)
    flex_y = np.zeros((h,w),np.float32)
    for y in range(h):
        for x in range(w):
            flex_x[y,x] = x + math.sin(x/30) * col1
            flex_y[y,x] = y + math.cos(y/30) * col2
    dst = cv2.remap(img,flex_x,flex_y,cv2.INTER_LINEAR)
    dst = cv2.cvtColor(dst , cv2.COLOR_BGR2RGB)
    plt.figure(figsize=(10,10))
    plt.tick_params(labelbottom=False,labelleft=False,labelright=False,labeltop=False)
    plt.imshow(dst)
    plt.show()

interact(show_plot, col1=x1, col2=y1 , col3 = selected)

実行していただくと
スクリーンショット 2020-11-14 16.04.16

こんな感じでメニューが出るようになっています。
このプログラムの直下にあるimgフォルダの中の
画像を参照するようにしているので
画像を用いる際はfiles変数の右の
ファイル名などを変更して下さい。

実行後は画像名をクリックすると
画像が切り替わります。

x,yは横、縦方向の画像の歪み度を変更します。
大きい数値の方が歪むようになります。

どんな感じになるかと言うと
download
download-1
download-2

かなり別人になるかなーと思いますが
若干元の人の特徴が残っているのが
面白いかなーと思います。

是非遊んでみて下さい。

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