检测两个连续图片的变化

时间:2009-03-02 14:57:34

标签: java image-processing

作为一个玩具项目,我想编写一个应用程序,它将从网络摄像头拍摄照片,然后检测它们的变化。我想检测是否有人走在网络摄像头前。

你们能告诉我一些如何在两次连续拍摄中发现重大变化的指示吗?

3 个答案:

答案 0 :(得分:11)

将每像素亮度值从一个图像减去另一个图像。

这将为您提供移动内容的每个像素的高值,以及相同位置的低值。总计这些值并检查它是否高于某个阈值数,以查看是否发生了重大变化。

我从笔记本电脑上拍了一张手的照片来显示:

alt text

答案 1 :(得分:2)

我首先将图像缩小到30K到60K像素。这不仅可以加快计算速度,还可以摆脱微小的无关变化。例如,您不希望在被风移动的开窗附近检测到窗帘。

接下来,对像素值的平方差进行求和。如果你想彻底地做,你可以分别为R,G和B做:

Delta := 0;
for y := 0 to Im1.Height do begin
  for x := 0 to Im1.Width do begin
    DeltaR := ( Im1[x,y].Red   - Im2[x,y].Red ) ^ 2;
    DeltaG := ( Im1[x,y].Green - Im2[x,y].Green ) ^ 2;
    DeltaB := ( Im1[x,y].Blue  - Im2[x,y].Blue ) ^ 2;
    Delta := Delta + DeltaR + DeltaG + DeltaB;
  end;
end;

if (Delta > Treshold) then
  Say( 'Hi Bob!' );

(这只是伪代码,因为代码处理速度相当慢,如果你想快速处理图像中的所有像素,请谷歌搜索“scanline”)

您可能需要根据经验定义阈值:通过相机缓慢行走,最好穿着与背景颜色相匹配的衣服,并查看您获得的三角形。
跳帧应该会提高灵敏度。

答案 2 :(得分:1)

Code Project处翻译是一篇很好的文章,解释了可能的解决方案。