加工師になろう
SNSの世界には加工師なんて呼ばれるイラストや写真の彩度・コントラストをいじることを生業とする人たちがいるそうです。よくわかんないですけど、そういうのができたら加工師を名乗れるそうです。なるほどねー。それなら僕でもできるかもしれない。
そうしたわけで、僕は加工師になるため(?)に OpenCV を使ってみることにしたのでした。ちなみに、件のツールはこんなやつです。
画像処理・画像解析および機械学習等の機能を持つC/C++、Java、Python、MATLAB用ライブラリ。プラットフォームとしてmacOSやFreeBSD等全てのPOSIXに準拠したUnix系OS、Linux、Windows、Android、iOS等をサポートしている。
なにやら難しいこと書いてありますが、大丈夫です。怖くありません。画像加工のツールと信じて使っていきましょう。
色々とサポートがあるので言語はなんでもいいですが、将来的に応用ききそうなPythonでいじっていくことにします。ちなみに、Anaconda標準で入ってなかった……、なんでだろう。
AnacondaからのOpenCVの導入についてはこちら
Opencv :: Anaconda Cloud
加工しよう
とりあえず何かするにも犠牲となるイラストを用意しないといけないのですが、丁度いらすとやに「絵の無断改変のイラスト」というイラストがあったのでそれを加工していこうと思います。




ダメ押しでもう一個やっておきましょうか。右が加工後です。


以下、ソースコード
import cv2 import numpy as np #### 画像の読込 filename = 'ファイル名.jpg' img = cv2.imread(filename, 1) ### HSV変換 -> HSV値の補正 -> BGR変換 img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) channel = cv2.split(img_hsv) for i, clist1 in enumerate(channel[1]): for j, clist2 in enumerate(clist1): if channel[1][i,j] == 0: pass elif channel[1][i,j] < 230: channel[1][i,j] += 15 img_hsv = cv2.merge([channel[0], channel[1], channel[2]]) img_hsv = cv2.cvtColor(img_hsv, cv2.COLOR_HSV2BGR) ### ガンマ値補正 min_table = 130 max_table = 230 lookup_table = np.arange(256, dtype = 'uint8') for i in range(min_table, max_table): lookup_table[i] = i + 20 img_contrast = cv2.LUT(img_hsv, lookup_table) ### 画像の保存 cv2.imwrite("output_"+filename+".jpg",img_hsv) #output_ファイル名.jpg ### 画像の表示 確認用 cv2.imshow('original', img) # 元画像 cv2.imshow('HSV', img_hsv) # HSV加工 cv2.imshow('CONST', img_contrast) # 変換後 cv2.waitKey(0) cv2.destroyAllWindows()
numpy入れたのに全く有効利用されてないコードになってしまいました。でかい画像で検証するとそこそこ時間がかかってしまう……。まあ、いいや。やっている処理はコメントにある通りです。
HSVの補正は画像編集ソフトとかのつまみをいい感じにしていじってコード内に決め打ちして実装している感じです。なので実装が汚い。
ガンマ値の方も同様にトーンカーブのあの点を決め打ちしてなんかこういい感じになるようにいじっただけです。やっぱり実装が汚い……。
いい感じとか言うふわっとした言い方してますが、なんか画像加工しようって言う情報が見つからなかったからこれで良しとしてます。もしかして、opencvって画像加工ツールではないのでは……?
おわり