运动检测的颜色相似

时间:2015-02-16 10:40:56

标签: c# motion-detection

给定2个连续帧,如何搜索更改的像素? 我尝试了以下方法:

        if (old != null)
        {
            for (int i = 0; i < b.Width; i++)
            {
                for (int j = 0; j < b.Height; j++)
                {
                    if (!b.GetPixel(i, j).Equals(old.GetPixel(i, j)))
                        s.SetPixel(i, j, b.GetPixel(i, j));
                    else
                        s.SetPixel(i, j, Color.White);
                }
            }
        }

“old”是前一帧,“s”是新帧。代码基本上描绘了白色没有变化的像素。 但由于网络摄像头产生的质量非常低,几乎所有像素都会发生变化。 如何消除没有“大大改变”的像素?

1 个答案:

答案 0 :(得分:1)

非常基本的方法是将Color像素转换为基于0 - 255的灰度值。 因此,您可以将像素作为整数进行比较,并产生一些增量误差差异。

考虑将颜色转换为整数灰度值的方法

private static int GreyScaleRange(Color originalColor) 
{
  return (int)((originalColor.R * .3) + (originalColor.G * .59)
             + (originalColor.B * .11));
}

所以不应该做同等的功能,你应该做

 int deltadifference = 5 ;

 if (Math.abs((GreyScaleRange(b.GetPixel(i, j)) - (GreyScaleRange(old.GetPixel(i, j)) > deltadifference)
      s.SetPixel(i, j, b.GetPixel(i, j));
 else
      s.SetPixel(i, j, Color.White);