旅行好きなソフトエンジニアの備忘録

プログラミングや技術関連のメモを始めました

【WPF】 画像の差分を計算してWPFのImageに表示したい

タイトルの通り画像の差分を計算してWPFのImageに表示する必要があったためメモします。画像の差分を取るためにはOpenCvC#用ラッパーであるOpenCvSharpを利用すればすぐに済むため、結局OpenCvSharpのMatクラスをWPFのImage.Sourceにどう入れるか、という話になります。

手順
  1. NuGetを利用してOpenCvSharpを導入する
  2. “参照の追加"からSystem.Drawingを追加する
  3. usingに"using OpenCvSharp;“ "using OpenCvSharp.Extensions;"を追加する
  4. 下記コードを記述する
// 画像1を読み込む
using (Mat image1 = Cv2.ImRead("lenna1.jpg"))
// 画像2を読み込む
using (Mat image2 = Cv2.ImRead("lenna2.jpg"))
// 差分画像を保存する領域を確保する
using (Mat diff = new Mat(new OpenCvSharp.Size(image1.Cols, image1.Rows), MatType.CV_8UC3))
{
    // 画像1と画像2の差分をとる
    Cv2.Absdiff(image1, image2, diff);
    // BitmapSourceConverterを利用するとMatをBitmapSourceに変換できる
    BitmapSource bitmap = BitmapSourceConverter.ToBitmapSource(diff);
    // Sourceに画像を割り当てる
    ImageToShowDiffImage.Source = bitmap;
}