LoginSignup
15
10

More than 5 years have passed since last update.

Go言語でグレースケールの画像に変換

Last updated at Posted at 2014-06-11

image以下のパッケージを使うとピクセル単位で画像処理が行なえる。
interfaceで宣言された抽象的な型が用意されているので、色々拡張できそう。

今回は、png画像をグレースケールにしてみる。
下記のプログラムは、標準入力から画像を取得し、標準出力に書き出す。
Image.Bounds()で画像の領域を取得し、Gray16ModelGray16に色を変換している。
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

以下のように変換される。

入力

gopher.png

出力

gopher_gray.png

15
10
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
10