【WPF】 画像の差分を計算してWPFのImageに表示したい
タイトルの通り画像の差分を計算してWPFのImageに表示する必要があったためメモします。画像の差分を取るためにはOpenCvのC#用ラッパーであるOpenCvSharpを利用すればすぐに済むため、結局OpenCvSharpのMatクラスをWPFのImage.Sourceにどう入れるか、という話になります。
手順
- NuGetを利用してOpenCvSharpを導入する
- “参照の追加"からSystem.Drawingを追加する
- usingに"using OpenCvSharp;“ "using OpenCvSharp.Extensions;"を追加する
- 下記コードを記述する
// 画像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; }