【WPF】OpenCV を使って グレースケール化する

アプリ開発

OpenCV を使って 画像をグレースケール化します。

実装手順

NuGet から「OpenCV」パッケージを入れる

「OpenCvSharp4」と「OpenCvSharp4.runtime.win」を入れます。

XAML

「MainWindow.xaml」に Image コントロールを置いて名前を「image」にします。

<Image Name="image"/>

グレースケール化する処理

ボタンのイベントで下記処理が実行されるようにします。

// Image コントロールから画像データを BitmapSource 形式で取得する。
var bitmapSource = (BitmapSource)image.Source;
// BitmapSource 形式を OpenCV の Mat 形式に変換する。
var mat = OpenCvSharp.Extensions.BitmapSourceConverter.ToMat(bitmapSource);
// OpenCV で グレースケール化する。
Cv2.CvtColor(mat, mat, ColorConversionCodes.RGB2GRAY);
// OpenCV の Mat 形式を BitmapSource 形式に変換する。
var bitmapSource_gray = OpenCvSharp.Extensions.BitmapSourceConverter.ToBitmapSource(mat);
// Image コントロールに BitmapSource 形式の画像データを設定する。
image.Source = bitmapSource_gray;

Cv2.CvtColor の 第3引数で 変換形式を指定できます。

今回はグレースケール化したかったので「RGB2GRAY」にしました。

「RGB を GRAY にする」みたいな意味合いでしょうね。きっと。

ちなみに「RGB2GRAY」の「2」って英語の「To」を意味しているんだと思います。発音が似ていますもんね。

もちろんモノクロで保存できます。

失敗したこと

Cv2.CvtColor の 第3引数 で何を選んでいいのか分からなかったです。

例えば適当に「ColorConversionCodes.GRAY2RGBA」を選んだらこんなエラーになりました。

OpenCvSharp.OpenCVException: ‘> Invalid number of channels in input image

そんなチャンネルねーよ。

よく理解していなかった私が悪いので、ちゃんと読んで理解したら自ずと指定するものが分かりました。

教訓

適当にし過ぎないこと。

タイトルとURLをコピーしました