背景减法 c# emgucv

Background Substraction c# emgucv

我从 emguCV 开始我的冒险。我想写一个简单的算法来检测移动物体。我尝试减去背景,但图像全黑。

public Form1()
{
   previous = grabber.QueryFrame();
   Application.Idle += new EventHandler(FrameGrabber27);
}

void FrameGrabber27(object sender, EventArgs e)
{
   Image<Bgr, Byte> output = new Image<Bgr,Byte>(300,300);
   Image<Bgr, Byte> actual = grabber.QueryFrame();

   int width = output.Width;
   int height = output.Height;

   image27.Image = grabber.QueryFrame();
   ibProcessed.Image = actual;
   for (int i = 0; i < width; i++)
   {
       for (int j = 0; j < height; j++)
       {                       
           if ((actual[j, i].Blue == previous[j, i].Blue) && ( actual[j, i].Red == previous[j, i].Red)&&(actual[j, i].Green == previous[j, i].Green))                    
           {
               output[j, i] =newBgr(0,0,0);                             
           }
           else
           {                         
               output[j, i] = new Bgr(255, 255, 255);
           }
       }
   }
   im.Image = output;
  1. 为什么输出图片的大小设置为300*300而不是actual.width*actual.height?
  2. output[j, i] =newBgr(0,0,0); 希望你在项目中没有忘记 space?
  3. ((actual[j, i].Blue == previous[j, i].Blue) && ( actual[j, i].Red == previous[j, i].Red)&&(actual[j, i].Green == previous[j, i].Green)) 这将 return 几乎总是正确的,因为即使网络摄像头和场景是静态的,两帧之间的每个像素的颜色总会有非常细微的变化。
  4. OpenCV 提供了 2 个背景扣除函数:Here it is