C#を用いて、グレースケール画像の明るさを変える方法について紹介します。
## 明るさ変更(C#)
グレイスケール画像は、白から黒まで0~255の256階調の輝度値で色を表現します。
明るさを変更したい場合は、画像全体の256階調の輝度値を増減させます。
輝度値を増やせば明るくなり、減らせば暗くなります。
ただし、輝度値が256以上は255、0未満は0と処理を加えておく必要があります。
今回はC#を用いて上記の処理を実装して、グレースケール画像の明るさ変更をしてみました。
## ソースコード
プログラムのソースコードです。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Drawing; using System.Drawing.Imaging; namespace ChangeBrightness { class Program { static void Main(string[] args) { // 画像の読み込み(グレースケールに変換して) byte[,] data = LoadImageGray("src.jpg"); // 明るさ変更 byte[,] filterdata = BrightnessChange(data, 50); // 画像保存 SaveImage(filterdata, "dst.jpg"); } // 明るさ変更(brightを足して256以上は255、0未満は0) static byte[,] BrightnessChange(byte[,] data, int bright) { // 画像データの幅と高さを取得 int w = data.GetLength(0); int h = data.GetLength(1); byte[,] brightdata = new byte[w, h]; for (int i = 0; i < h; i++) { for (int j = 0; j < w; j++) { if ((int)data[j, i] + bright >= 256) { brightdata[j, i] = 255; } else if ((int)data[j, i] + bright < 0) { brightdata[j, i] = 0; } else { brightdata[j, i] = (byte)(data[j, i] + bright); } } } return brightdata; } // 画像をグレースケール変換して読み込み 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); } } }
## 実行結果
プログラムの実行結果は下記の通りです。
■入力画像と出力画像
入力画像の輝度値を+50にしてより明るくしています。
- | 関連ページ |
---|---|
1 | ■C#で画像処理入門 |
2 | ■C#入門】基礎文法とサンプル集 |
コメント