C#を用いて、カラー画像をグレースケール画像に変える方法について紹介します。
## グレースケール変換(C#)
グレイスケール画像は、白から黒まで0~255の256階調の輝度値で色を表現します。
カラー画像をグレースケール画像に変換したい場合は、RGBの輝度値を足し合わせて3で割ります。
今回はC#を用いて上記の処理を実装して、グレースケール画像への変換をしてみました。
– | グレースケールの原理についてはこちら |
---|---|
参考 | ■【画像処理】グレースケールの原理・特徴・計算式 |
## ソースコード
プログラムのソースコードです。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Drawing; using System.Drawing.Imaging; namespace Main { class Program { static void Main(string[] args) { // 画像の読み込み(グレースケールに変換して) byte[,] data = LoadImageGray("src.jpg"); // 画像保存 SaveImage(data, "dst.jpg"); } // 画像をグレースケール変換して読み込み static byte[,] LoadImageGray(string filename) { Bitmap bitmap = new Bitmap(filename); int w = bitmap.Width; int h = bitmap.Height; byte[,] data = new byte[w, h]; // bitmapクラスの画像ピクセル値を配列に挿入 for (int i = 0; i < h; i++) { for (int j = 0; j < w; j++) { // グレイスケールに変換 data[j, i] = (byte)((bitmap.GetPixel(j, i).R + bitmap.GetPixel(j, i).B + bitmap.GetPixel(j, i).G) / 3); } } return data; } static void SaveImage(byte[,] data, string filename) { // 画像データの幅と高さを取得 int w = data.GetLength(0); int h = data.GetLength(1); Bitmap bitmap = new Bitmap(w, h); // ピクセル値のセット for (int i = 0; i < h; i++) { for (int j = 0; j < w; j++) { bitmap.SetPixel(j,i,Color.FromArgb(data[j, i], data[j, i], data[j, i])); } } // 画像の保存 bitmap.Save(filename); } } }
## 実行結果
プログラムの実行結果です。
【入力画像】
【出力画像】
- | 関連ページ |
---|---|
1 | ■C#で画像処理入門 |
2 | ■C#入門】基礎文法とサンプル集 |
コメント