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#入門】基礎文法とサンプル集 |


コメント