写真から顔を検出して部分的にglitchをかける
opencvで顔を検出して切り抜き、Glitchフィルタをかけた後にimagemagickで合成して出力する。
- きっかけ: twitter@9m
- できたの: geta6/flitch
元の写真
Google Image Searchでfaceで検索した様子。
検出状態
ellipseしてみた。
処理後
概ね望んだ通りの結果が得られた。
清く正しく美しく画像を破壊するのは難しい。
現在はbase64に変換して1
をB
に書き換えてbinaryに書き戻しているので、ほぼ全ての領域で正しく破壊できているが、何回やっても結果は変わらない。
当初はbyteArrayにしてランダム箇所にランダム値を~255で突っ込む、という適当実装だった。成功すればとても美しく破壊できるのだが、失敗すると画像フォーマットそのものを破壊してimagemagickから無視されるので、やめた。顔が検出されてないみたいでかっこ悪いし。
ちなみに、byteArrayへの変換方法はこちらを参考にした。
Buffer.prototype.toByteArray = -> Array.prototype.slice.call @, 0