読者です 読者をやめる 読者になる 読者になる

AccessViolation Exception

仕事でもはんだづけ、家でもはんだづけ

Scalaで画像処理(フィルター加工)

画像処理 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


f:id:kamiyaowl:20140302003338p:plain

sample

f:id:kamiyaowl:20140302003224j:plain

edge_3

f:id:kamiyaowl:20140302003249j:plain

blur

f:id:kamiyaowl:20140302003304j:plain

sharp_3

f:id:kamiyaowl:20140302003315j:plain

enbos_3

OpenCVをいちいち導入しなくてもこれだけ使えればどうにかなりそう

gist貼っておきます

scalaでフィルタ処理