2017-08-30 3 views
0

私はC#でコーディングしています.2つの画像の違いについて助けが必要です。私はこの部分で私を助けるためにemguを使っています。ここで問題となるのは、ピクセルにdiffがある限り、結果のピクチャに表示されるということです。emguを使った2つの画像の相違

しかし、私が必要とするのは、RefImgのピクセルがCompImgよりも高い場合、色は赤で、それよりも小さい場合は緑でなければなりません。

コードの実行には最小限の時間がかかります。

以下のコードは私が今使っているコードです。

Image<Bgr, Byte> RefImg = new Image<Bgr, Byte>(new Bitmap(refImg)); 
Image<Bgr, Byte> CompImg = new Image<Bgr, Byte>(new Bitmap(compImg)); 
Image<Bgr, Byte> Difference; //Difference 
double Threshold = 5; 

Difference = RefImg.AbsDiff(CompImg); 
Difference = Difference.ThresholdBinary(new Bgr(Threshold, Threshold, Threshold), new Bgr(0, 255, 0)); 

答えて

0

Abs diffを使用すると、絶対値演算子による記号は検出できませんが、記号は検出されません。 ピクセル値を大きくしたり小さくしたりするには、cmp関数を使用する必要があります。

Image<Bgr, Byte> RefImg = new Image<Bgr, Byte>(...); 
Image<Bgr, Byte> CompImg = new Image<Bgr, Byte>(...); 

//Convert to gray levels or split channels 
Image<Gray, Byte> RefImgGray = RefImg.Convert<Gray, byte>(); 
Image<Gray, Byte> CompImgGray = CompImg.Convert<Gray, byte>(); 

//Compare image and build mask 
Image<Gray, Byte> MaskDifferenceHigh = RefImgGray.Cmp(CompImgGray, CmpType.GreaterThan); 
Image<Gray, Byte> MaskDifferenceLow = RefImgGray.Cmp(CompImgGray, CmpType.LessThan); 

//Draw result 
Image<Bgr, byte> result = RefImg.CopyBlank(); 
result.SetValue(new Bgr(Color.Red),MaskDifferenceHigh); 
result.SetValue(new Bgr(Color.Green), MaskDifferenceLow); 

希望します。

+0

はい、それは私を助けました!本当にありがとう。私はMaskDifferenceLowのタイプミスがあると思いますが、あなたは同じイメージを比較しました。 – Snooze

関連する問題