目的
先日の記事のせいで、少し画像処理に興味が湧いてきました。
とは言え最後に数学を触ったのは高3の期末テスト...。しかも2点。
理解不能なところもありましたが、まずは触ってみようということでコードを書いてみました。
まずはインストールと画像の用意
opencv2ってのが画像処理用のモジュールらしい。ということで安直に「pip install opencv2」するも見つからないらしい。どうやらこっちが正しい模様。
$ pip install opencv-python
ぼかす画像は目の保養としてフリー素材の田舎っぽい画像を採用。
こいつをぼかしていきましょう。
コード
ではコードを書いていきます。
インポート部分+画像読み込み
import cv2
#画像を読み込む
image = cv2.imread("inaka.jpg")
(補足)BGR→RGB変換したい場合
このopencv2は、画像をBGRで表現してくるらしい。
そして、加工後の画像を保存したり、描画するためにするために使えるライブラリであるmatplotlibはRGB形式。matplotlibを使う場合、ここの違いを無視して進めるとこうなります! 笑
というわけで、BGR→RGB変換する場合はこう。今回は加工後の画像をmatplotlibに渡したりはしないので不要です。
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
ぼかす
いよいよぼかし作業に入ります。とは言ってもメソッド呼ぶだけ。
blurr_image = cv2.GaussianBlur(image, (5, 5), 0)
このGuassianBlur、引数がよくわかりませんでした。
第一引数は画像オブジェクト、第二引数はカーネルなる数値配列、第三引数は標準偏差らしいですが
私にとってはすべて宇宙語に聞こえます。ちゃんと勉強しとけばよかった。
画像を書き出す
さて出来上がった画像を書き出します。
cv2.imwrite("new_image.jpg", blurr_image)
コード最終形態
コード全体はこんな感じになりました。
import cv2
image = cv2.imread("inaka.jpg")
blurr_image = cv2.GaussianBlur(image, (5, 5), 0)
cv2.imwrite("new_image.jpg", blurr_image)
確認してみる
変わった...のか...?
GaussianBlurの引数をちょこちょこ弄ってみましたが、法則性が掴めず今日は時間も無いし断念...。
ゴリ押し突破
余談ですが目が悪すぎるくせにメガネは邪魔で嫌い、コンタクトも怖くて入れられないので
普段からすべてぼけて見えてます。そのせいで本当にぼけてくれたのか全くわかりません。
もしかしたら上の画像もちゃんとぼけてるのかもしれませんが、体感できないので繰り返しで100回ぐらい回してやろうと思いました(絶対使い方間違ってると思います)。
import cv2
image = cv2.imread("inaka.jpg")
for i in range(1,100):
image = cv2.GaussianBlur(image, (5, 5), 0)
cv2.imwrite("new_image.jpg", image)
ちなみに、これ以上繰り返し回数を増やしても劇的にボケ度がUPすることはありませんでした。
会社を辞めた後輩に詳しいやつがいたような気がするので、聞いてみようと思います。
結論
・画像のぼかしはopencv2で実現可能
・GuassianBlurの使い方がよくわからないけど泥臭くぼかし処理を繰り返したらそれっぽくなった