コミュ障だから明日が僕らをよんだって返事もろくにしなかった

何かを創る人に憧れたからブログをはじめたんだと思うよ

これから僕は加工師ってやつで生きていこうと思うんだ

加工師になろう

SNSの世界には加工師なんて呼ばれるイラストや写真の彩度・コントラストをいじることを生業とする人たちがいるそうです。よくわかんないですけど、そういうのができたら加工師を名乗れるそうです。なるほどねー。それなら僕でもできるかもしれない。


そうしたわけで、僕は加工師になるため(?)に OpenCV を使ってみることにしたのでした。ちなみに、件のツールはこんなやつです。

画像処理・画像解析および機械学習等の機能を持つC/C++JavaPythonMATLAB用ライブラリ。プラットフォームとしてmacOSFreeBSD等全てのPOSIXに準拠したUnix系OSLinuxWindowsAndroidiOS等をサポートしている。

なにやら難しいこと書いてありますが、大丈夫です。怖くありません。画像加工のツールと信じて使っていきましょう。

公式
OpenCV library


色々とサポートがあるので言語はなんでもいいですが、将来的に応用ききそうなPythonでいじっていくことにします。ちなみに、Anaconda標準で入ってなかった……、なんでだろう。

AnacondaからのOpenCVの導入についてはこちら
Opencv :: Anaconda Cloud



加工しよう


とりあえず何かするにも犠牲となるイラストを用意しないといけないのですが、丁度いらすとやに「絵の無断改変のイラスト」というイラストがあったのでそれを加工していこうと思います。


f:id:andron:20180807210657j:plainf:id:andron:20180807210716j:plain
これを右のようにしてみました。若干ゃ色味がよくなってるはず。よくわかんないですね……。もう少し試してみます。



f:id:andron:20180807210934j:plainf:id:andron:20180807211146j:plain
いらすとや縛り分かりづらいのでは……?右が加工後となります。服の色に着目すると少し濃いめになっているのが……わかるようで……分からん。全然わからん……。あと肌の色とかちょっと血色がよくなったような……。



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

f:id:andron:20180807211455j:plainf:id:andron:20180807211458j:plain
素材もとが同じなので比較しづらいですね。もう少し派手にいじることもできるんですけど、やりすぎると目に悪いですしこれでいいか…(妥協)。



以下、ソースコード

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の補正は画像編集ソフトとかのつまみをいい感じにしていじってコード内に決め打ちして実装している感じです。なので実装が汚い。
f:id:andron:20180807212204p:plain

ガンマ値の方も同様にトーンカーブのあの点を決め打ちしてなんかこういい感じになるようにいじっただけです。やっぱり実装が汚い……。
f:id:andron:20180807212238p:plain

いい感じとか言うふわっとした言い方してますが、なんか画像加工しようって言う情報が見つからなかったからこれで良しとしてます。もしかして、opencvって画像加工ツールではないのでは……?


おわり

おまけ

そうしたわけで生業とするために、新企画です。あなたの一押しの画像を加工させていただきます。みなさんドシドシ応募してくださいね。なお、いただいた画像加工の処置ですが加工後の画像データでなくソースコードのほうを上げさせていただきます(衝撃の条件)。ソースはgithubにでも上がるんじゃないですかね(適当)。


OpenCVで画像加工とか言っているけど、アレ本来は画像解析用のツールなんですけどね……。いい感じに加工できる要素がそろっているのは機械学習に食わせるデータや画像解析のために情報量を……(文章はここで途切れている)。