今回はシルエット当てクイズとかに使われる
視力検査画像を作っていきたいと思います
解説動画はこちら
今回はGoogle Colabで作業を行います
画像の用意
まずはなんでも良いので
画像を用意しましょう
シルエットがうまく抽出できるように
背景が薄くて、個体が判別できるものが良いですね
これをファイル置き場に置いておきます
画像の読み込み
opencvで画像を取り込んでいきます
ライブラリのインポートが終わったら
画像を読み込みましょう
ファイル名やパスなどは
あわせる様に変えましょう
うまく取り込めていたら
画面に表示されます
シルエットを抽出する
画像が取り込めたら
次はその画像のシルエットを抽出します
具体的な手法としては
白黒画像に変換して
閾値を調整しながら濃いところを
抜いていきます
threshold をうまく変えて
調整して抜いて下さい
シルエット画像は
こんな感じになります
合成用の下地となる
青い画像を作っていきます
サイズは元の画像のサイズになります
下地にシルエットを合成する
最後に下地にシルエットを合成します
eye_test_value を変えると
シルエットの濃さを調整できるので
色々変えて試してみて下さい
値を小さくしてみると
どこまで見えますかね
見えたらあなたの視力は正常です
シルエット画像や下地
濃さを調整すれば
色々楽しめそうな感じの画像が
いくらでも作れますね
opencvは便利なので
こういった画像加工を行いたい方は
是非参考にしてみてください
それでは
視力検査画像を作っていきたいと思います
解説動画はこちら
Opencvで視力検査の画像っぽいものを作ります
画像のシルエットを浮かび上がらせて
何のキャラかを当てるやーつですね
何のキャラかを当てるやーつですね
見えたら正常・・・ってな奴です
参考画像はこんな感じのものです
参考画像はこんな感じのものです
今回はGoogle Colabで作業を行います
作業手順としては次の通りです
0.画像をGoogle Colabにアップロードしておく
1.画像を取り込む
2.シルエットを抽出する
3.下地画像を作る
4.下地にシルエットを合成する
画像の用意
まずはなんでも良いので
画像を用意しましょう
シルエットがうまく抽出できるように
背景が薄くて、個体が判別できるものが良いですね
これをファイル置き場に置いておきます
画像の読み込み
opencvで画像を取り込んでいきます
Opencvのインポート import numpy as np import cv2 import os from IPython.display import display,Image import matplotlib.pyplot as plt %matplotlib inline
ライブラリのインポートが終わったら
画像を読み込みましょう
ファイル名やパスなどは
あわせる様に変えましょう
うまく取り込めていたら
画面に表示されます
# 画像を読み込む file_path = "/content/ファイル名" img = cv2.imread(file_path) # 出力 out = cv2.imencode(".png", img)[1] display(Image(out,width=300))
シルエットを抽出する
画像が取り込めたら
次はその画像のシルエットを抽出します
具体的な手法としては
白黒画像に変換して
閾値を調整しながら濃いところを
抜いていきます
threshold をうまく変えて
調整して抜いて下さい
# グレースケールに変換する。 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 2値化する(thresholdを変えて、うまく抜いてね) threshold = 120 ret, bin_img = cv2.threshold(gray, threshold, 255, cv2.THRESH_BINARY) # 出力 out = cv2.imencode(".png", bin_img)[1] display(Image(out,width=300))
シルエット画像は
こんな感じになります
下地の画像を用意する
合成用の下地となる
青い画像を作っていきます
サイズは元の画像のサイズになります
height = bin_img.shape[0] width = bin_img.shape[1] blank = np.zeros((height, width, 3)) blank += [0,0,255][::-1] blank = blank.astype(np.uint8) out = cv2.cvtColor(blank, cv2.COLOR_BGR2RGB) plt.imshow(out) plt.axis("off") plt.show()
下地にシルエットを合成する
最後に下地にシルエットを合成します
eye_test_value を変えると
シルエットの濃さを調整できるので
色々変えて試してみて下さい
eye_test_value = 100 for h in range(bin_img.shape[0]): for w in range(bin_img.shape[1]): v = bin_img[h][w] if v==0: blank[h][w][0] = blank[h][w][0] - eye_test_value out = cv2.cvtColor(blank, cv2.COLOR_BGR2RGB) plt.imshow(out) plt.axis("off") plt.show()
値を小さくしてみると
どこまで見えますかね
見えたらあなたの視力は正常です
シルエット画像や下地
濃さを調整すれば
色々楽しめそうな感じの画像が
いくらでも作れますね
opencvは便利なので
こういった画像加工を行いたい方は
是非参考にしてみてください
それでは