Pythonでいろいろやってみる

Pythonを使った画像処理や機械学習などの簡単なプログラムを載せています。

画像をグニャグニャにする(各行をsinカーブでx方向にずらす)

画像をグニャグニャにします。画像を読み出し別のndarrayに1行ずつコピーしますが、その際にx方向にsinカーブでずらすことでグニャグニャに変形した画像を生成します。

関連記事

黒画像を作成する
画像を斜めに変形する
画像をザーザーにする(各行をランダムにx方向にずらす)

環境
  • windows10 home
  • Anaconda 3/ jupyter notebook 5.6.0
  • Python 3.7.0
  • OpenCV 4.0.0
準備

画像ファイルはフリー写真素材ぱくたそからダウンロードさせていただき、ファイル名'ramen.jpg'で、jupyter notebookファイル(***.ipynb)と同じディレクトリに保存しました。
f:id:T_A_T:20190609211927j:plain
ramen.jpg

コード
import cv2
import numpy as np
import math

shift_mag = 50 # x方向の最大のシフト量
y_mag = 5 # 高さ方向のsinカーブの細かさ

# 画像読み込み
img = cv2.imread('ramen.jpg')
# 画像の高さ、幅の取得
height,width = img.shape[:2]
# 高さがimgと同じ、幅がimgの幅+最大のシフト量になる黒画像を作成
img_snake = np.zeros((height, width+shift_mag, 3), np.uint8)

# 一行ずつ、imgをimg_snakeにimgをコピー
# その際にx座標をsinカーブでずらす
for y in range(height):
    shift = int(shift_mag/2*math.sin(math.radians(y*y_mag))+shift_mag/2)
    img_snake[y,0+shift:width+shift] = img[y]

# 画像の保存
cv2.imwrite('snake.jpg',img_snake)
実行結果

グニャグニャに変形した画像が保存されます。
f:id:T_A_T:20190611205635j:plain

ブログランキングに参加しています

にほんブログ村 IT技術ブログへ
にほんブログ村