ヒストグラムの平坦化を行います。
ダイアログ生成のサブルーチン化
別記事に移動しました。
ファイル名:FilterDialog.cs
ファイル名:FilterDialog.cs
C#のWinFormsで画像加工アプリ1「ドラックアンドドロップで画像を表示しCtrl+Cでクリップボードへコピー」
画像加工アプリケーションを作成します。 今回はメインとなるフォームにドラックアンドドロップで画像表示、Ctrl+Cでクリップボードへコピー、メニューで画像の拡大機能を作成してみました。 プロジェクトの作成 mkdir GazouKakou0...
ソースコード
ファイル名:Form1.EqualizeHist.cs
using OpenCvSharp;
using OpenCvSharp.Extensions;
namespace GazouKakou02;
public partial class Form1 : Form
{
// メニュー項目
readonly ToolStripMenuItem equalizeHistMenuItem = new()
{
Text = "ヒストグラム平坦化",
};
/// <summary>
/// ヒストグラム平坦化の初期化
/// </summary>
public void Init_EqualizeHist()
{
// メニューの登録
filterMenuItem.DropDownItems.Add(equalizeHistMenuItem);
// フィルター(ヒストグラム平坦化)
Func<Bitmap, Task<Bitmap>> filter = new(async (src) =>
{
return await Task.Run(()=>
{
using Mat srcMat = BitmapConverter.ToMat(src);
using Mat dstMat = new();
if (srcMat.Channels() > 1)
Cv2.CvtColor(srcMat, srcMat, ColorConversionCodes.BGR2GRAY);
Cv2.EqualizeHist(srcMat, dstMat);
return BitmapConverter.ToBitmap(dstMat);
});
});
// メニューアイテムのクリックイベント
equalizeHistMenuItem.Click += (s, e) =>
{
if (_buffBmp is null) return;
var dialog = new FilterDialog();
dialog.Track1Label.Visible = false;
dialog.Track1.Visible = false;
Bitmap? bmp = null;
dialog.Load += async (s, e) =>
{
bmp = await filter(_buffBmp);
dialog.Picbox.Image?.Dispose();
dialog.Picbox.Image = bmp;
};
if (dialog.ShowDialog() == DialogResult.OK)
{
// OK
if (bmp is not null)
this.Bmp = bmp;
} else {
// Cancel
bmp?.Dispose();
}
};
}
}
コメント