Go言語でグレースケールの画像に変換
June 12, 2014
この記事はQiitaの記事をエクスポートしたものです。内容が古くなっている可能性があります。
image
以下のパッケージを使うとピクセル単位で画像処理が行なえる。
interface
で宣言された抽象的な型が用意されているので、色々拡張できそう。
今回は、png画像をグレースケールにしてみる。
下記のプログラムは、標準入力から画像を取得し、標準出力に書き出す。
Image.Bounds()
で画像の領域を取得し、Gray16Model
でGray16
に色を変換している。
Gray16
以外にもRGBA
などの色があり、色ごとに-Model
がある。
もちろん、自前でColor
インタフェースを実装することは可能である。
package main
import (
"image"
"image/color"
"image/png"
"os"
)
func main() {
img, _ := png.Decode(os.Stdin)
bounds := img.Bounds()
dest := image.NewGray16(bounds)
for y := bounds.Min.Y; y < bounds.Max.Y; y++ {
for x := bounds.Min.X; x < bounds.Max.X; x++ {
c := color.Gray16Model.Convert(img.At(x, y))
gray, _ := c.(color.Gray16)
dest.Set(x, y, gray)
}
}
png.Encode(os.Stdout, dest)
}
実行してみる。
$ go run gray.go < gopher.png > gopher_gray.png
以下のように変換される。