Scalaで画像処理(フィルター加工)
Scalaで画像を扱うことになったが使うと言ってもエッジ検出程度だったのでOpenCVを導入するにはどうにも非効率。なのでjava.awt.imageにあるConvolveOpを使ってフィルタ処理を実装した。
RichString
文字列から拡張子を拾う。今更だが今までのimplicit class内でimplicit defの暗黙変換を導入していたがimplicit classを用いるなら不要(ちゃんと読んでませんでした
RichBufferedImage
save(dst)みたいな書き方が嫌いだからつけた dst.saveが美しい
FilterExtensions
ここがほぼメイン 元々は
val src = ImageIO.read(new File(/* 元画像 */)) val dst = /* srcと同フォーマットの画像を初期化 */ val filterArr = Array[float](/* フィルタの値 */) val kernel = new Kernel(/*横*/,/*縦*/,filterArr) val op = new ConvolveOp(kernel) op.filter(src,dst)
だったものを綺麗にしただけ
ImageFilters
Filterを列挙しているだけ。別にArray(0.0f,1.0f,-1.0f,0.0f).filter(src)でもいける
Result
sample
edge_3
sharp_3
enbos_3
OpenCVをいちいち導入しなくてもこれだけ使えればどうにかなりそう
gist貼っておきます