こんにちは!zhackです。
先日画像処理に関する記事を掲載し、これに関して、Go言語で二値化処理したプログラムについて紹介しました。

【画像処理】Go言語で二値化処理!【サンプルプログラムあり】
こんにちは!zhackです。
先日、以下の画像処理に関する記事を掲載いたしました。
今回は、それを実際にプログラムで再現してみました。
利用したプログラム言語は、現在勉強中のGo言語です!
画像処理業界ではおなじ...
今回は、グレースケール化処理について説明していきます。
前提
実行環境
今回の実行環境は以下の通りです。
- Debian GNU/Linux8
※Dockerコンテナで環境構築 - プログラム名称:grayscale.go
- 入力データ:lena.jpg
- 実行コマンド
$ go run プログラム名 < 入力画像のパス > 出力画像のパス 今回の場合は $ go run grayscale.go < lena.jpg > binary.jpg
- Gitにも掲載しています。ご参考まで。
Dockerの環境構築や、Go言語の開発環境構築は以下の記事に掲載しています。

DockerでGo言語開発環境構築
Dockerを使ったGo言語の開発環境構築手順を紹介します!簡単に仮想環境を構築できるDockerに、最近サーバサイドの開発で使われつつあるGo言語の開発環境を構築しました。今回はその手順についてご紹介します。

画像付き:Dockerのインストール手順(Windows OS)
zhack(私)が実際に行ったDockerのWindowsOSへのインストール手順です。インストールなしで試してみたい方向けにPlay with Dockerの利用方法も簡単に説明します。
プログラムのひな型
前回同様、実装したプログラムのひな型を紹介します。
package main
// 必要なライブラリのインストール
import (
"image"
"image/color"
"image/jpeg"
"os"
)
// メイン関数
func main() {
// 入力データの読み込み
img, _ := jpeg.Decode(os.Stdin)
// 入力データを走査するデータの作成
bounds := img.Bounds()
// 出力用の入れ物を作成
dest := image.NewRGBA(bounds)
// 画像を1ピクセルずつ走査
for y := bounds.Min.Y; y < bounds.Max.Y; y++ {
for x := bounds.Min.X; x < bounds.Max.X; x++ {
// ピクセルの取得
curPixel := img.At(x, y)
// ピクセルから色情報RGBA(16bit)を取得
r ,g ,b, a := curPixel.RGBA()
// 色情報16bitを8bitの形式に変換
r, g, b, a = r>>8, g>>8, b>>8, a>>8
// (1) 必要な処理
}
}
// 処理結果を画像形式で出力
err := jpeg.Encode(os.Stdout, dest, nil)
if err != nil {
panic("Failed to encode JPEG gradient image.")
}
}
上記、プログラムにおける“(1) 必要な処理”と書いているところにグレースケール用のコードが入ります。
Go言語のImageパッケージを用いたときの色情報の取得方法については、先日記載した、二値化処理に関する記事をご参考ください。

【画像処理】Go言語で二値化処理!【サンプルプログラムあり】
こんにちは!zhackです。
先日、以下の画像処理に関する記事を掲載いたしました。
今回は、それを実際にプログラムで再現してみました。
利用したプログラム言語は、現在勉強中のGo言語です!
画像処理業界ではおなじ...
Go言語でグレースケール化処理
プログラム
各ピクセルのRGB値の平均をそのまま輝度情報として、画像に割り当ててみました。
RGBそれぞれに同一の値(mean)をいれることで、グレースケール化を実現することができます。
// RGB値から平均を算出
mean := ( r + g + b ) / 3
// 出力する画像として、色を設定
col := color.RGBA{R: uint8(mean), G: uint8(mean), B: uint8(mean), A: uint8(a)}
dest.Set(x, y, col)
出力結果
上記のプログラムを実行するとこのようになります。
また、今回はRGB値の平均を用いましたが、その値を調整することで様々なグレースケール画像を出力することができます。
さいごに
Go言語で画像処理を行うシリーズ第二弾として、グレースケール化を紹介しました。
結構シンプルな処理で実現できますよね。
意外と画像処理って簡単なんだな、と感じていただければ幸いです。
ではでは!
コメント
[…] […]