2016-02-02 2 views
2

У меня есть два набора изображений с одинаковыми размерами и пикселями. Теперь мне нужно сравнить selectedFrame, который является 1-м изображением для backImageFrame, который является вторым изображением. Мне нужно получить разницу в изображениях и извлечь их, чтобы я мог выводить их в ImageBox. Теперь я использую AbsDiff функцию EmguCVКак сравнить два изображения и извлечь их разницу?

selectedFrame.ROI = recArray[random]; 
backImageFrame.ROI = recArray[random]; 
// backImageFrame = selectedFrame.AbsDiff(backImageFrame); 
CvInvoke.AbsDiff(selectedFrame, backImageFrame, backImageFrame) 
imgTry.Image = backImageFrame; 
imageBox1.Image = selectedFrame; 

imgTry ImageBox не имеет никакого значения в этом

ответ

5

Вы можете использовать API изображения, чтобы найти разницу между одним изображением и другого, то вам может определять пороговое значение для разницы, которая должна быть рассмотрена и применять это.

Код будет что-то вроде:

Image<Bgr, Byte> Frame; //current Frame from camera 
Image<Bgr, Byte> Previous_Frame; //Previiousframe aquired 
Image<Bgr, Byte> Difference; //Difference between the two frames 
int Threshold = 60; //stores threshold for thread access 



Difference = Previous_Frame.AbsDiff(Frame); //find the absolute difference 
       /*Play with the value 60 to set a threshold for movement*/  
Difference = Difference.ThresholdBinary(new Bgr(Threshold, Threshold, Threshold), new Bgr(255,255,255)); //if value > 60 set to 255, 0 otherwise 

делать Followup с this example, чтобы лучше понять.

+0

Спасибо! Но в этом примере разница не извлекается из фона. Мне нужно извлечь их разницу. http://s21.postimg.org/p3bv6kpw3/image.jpg http://s21.postimg.org/jt6wfa5n7/image.jpg – Untitled

0

Это работает для меня.

Image<Gray, Byte> img1 = picPrev.Convert<Gray, Byte>(); 
Image<Gray, Byte> img2 = picCurrent.Convert<Gray, Byte>(); 
Image<Gray, Byte> img3; 
img3 = img1 - img2; //Here the difference is applied. 
pictureBox3.Image = img3.ToBitmap(); 
Смежные вопросы