はじめに
最近雨で、家にいることが多いですよね。
となると、人生にスパイスが必要になるのは自明かと思います。
スパイスといえばやはり、笑い
笑いというのは一般に**「外的刺激によって、異なるイメージが作り出されることによる、脳の混乱が引き起こす反射的な反応であると考えられる。」**と言われております。
なので、真面目な資料の中に混入できるようにゲーミング文字を作りたいと思います。
#ゲーミング文字とは?
このように虹色に光るものをよく「ゲーミング」と称することがあります。
真面目なビジネスシーンや、シンプルなデザインにおいて
というのは過度なノイズであると言えます。
こういったカラフルに光って存在感を出す文字を「ゲーミング文字」と定義させてください。
#作り方
これじゃぁ、誠意も何も感じない進捗だめですね。
怒られるのは嫌なので改造しましょう。
HSV色空間
今回のミソは色空間を使うことです。
hsv表記とは色を色相(Hue)・彩度(Saturation)・明度(Value)の3要素で表現する方法です。
色相が360で一周することにより疑似的に虹色を作り出すことが出来ます。
このように変化するのでHSVの値を1ずつ変え、それらをRGB値で表記させる必要があります。
def hsv_to_rgb(h, s, v):
bgr = cv2.cvtColor(np.array([[[h, s, v]]], dtype=np.uint8), cv2.COLOR_HSV2BGR)[0][0]
return (bgr[2], bgr[1], bgr[0])
この関数を使っていきましょう。
カラフルな文字の作り方
今回は以下のプログラムを利用しました。
pic = cv2.imread("dame.png")
size = pic.shape
img = np.zeros(size, dtype=np.uint8)
for j in range(180):
for i in range(img.shape[1]):
# ここでスタート位置を変えている
res = hsv_to_rgb((i+j) % 180,255,255)
pts = np.array( [ [i,0], [i,img.shape[0]], [i+1, 0], [i+1,img.shape[0]]])
dst = cv2.fillPoly(img, pts =[pts], color=(int(res[0]),int(res[1]),int(res[2])))
transparence = (0,0,0)
result = np.where(pic==transparence, dst, pic)
ksize=7
result = cv2.medianBlur(result,ksize)
cv2.imwrite(f"res/{j+1000}.jpg",result)
これで、以下のようなカラフルな進捗だめですを作れます。
hsvの値を少しずつ変えることによって疑似的に虹色が作れます。
さらにnp.whereを使って該当するところの色を変えています。
今回は黒い文字で書きましたので、黒い部分がすべて虹色に置き換わっていますね。
これらを見ているだけでも楽しいですが
これらを組み合わせてgifファイルを作っていきましょう。
gifファイル化
gifファイルを作るにはPILを使います。
pictures=[]
for tmp in pic:
pictures.append(Image.open(tmp))
pictures[0].save('dame.gif',save_all=True, append_images=pictures[1:], optimize=False, duration=1, loop=0)
虹色に光る進捗だめが出来ました。
いいですね。
結論
画像処理を使って簡単にゲーミング文字を作成することが出来ました。
次の目標として、文字でもできるようにしたいですね。
正規分布を虹色に光らせましょう。