こんにちは!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言語で画像処理を行うシリーズ第二弾として、グレースケール化を紹介しました。
結構シンプルな処理で実現できますよね。
意外と画像処理って簡単なんだな、と感じていただければ幸いです。
ではでは!
コメント
[…] […]