2

我正在寻找一种在 AS3 中相当简单的图像比较方法。我从网络摄像头(没有主题)拍摄了一张图像,将其传递给位图数据,然后拍摄了第二张图像(这次有一个主题)来比较这些数据,我想从这两张图像中创建一个蒙版来自两个位图上匹配的像素。我一直在摸不着头脑,我并没有真正取得任何进展。任何人都可以为我指出像素比较方法的正确方向,例如 getPixel32()

干杯

城野

4

2 回答 2

4

使用compare来创建两者之间的差异,然后使用treshold提取您感兴趣的部分。

编辑:实际上它非常简单。诀窍是使用掩码参数对每个通道多次应用阈值(否则比较几乎没有意义,因为0x010000(几乎是黑色)被认为大于0x0000FF(除了黑色之外的任何东西))。就是这样:

var dif:BitmapData;//your original bitmapdata
var mask:BitmapData = new BitmapData(dif.width, dif.height, true, 0);
const threshold:uint = 0x20;
for (var i:int = 0; i < 3; i++) 
    mask.threshold(dif, dif.rect, new Point(), ">", threshold << (i * 8), 0xFF000000, 0xFF << (i * 8));

这将创建一个透明蒙版。然后将阈值应用于所有三个通道,将 alpha 通道设置为完全不透明,其中通道值超过阈值(您可能想要减少它)。

您可以通过将 Alpha 通道从蒙版复制到当前视频图像来隔离前景对象(“网络摄像头前的人”) 。

于 2010-03-30T10:18:42.230 回答
0

这里的问题之一是您想查找一个像素是否有任何更改,如果有,则将该像素转换为另一种颜色(用于遮罩)。不幸的是,网络摄像头的质量不是很好,因此即使您的场景完全没有变化,来自网络摄像头的位图数据也会略有变化。因此,当您的拍摄对象进入画面时……您将获得拍摄对象的像素变化……但由于光照变化或相机质量,其他区域也会出现噪点。您需要做的是编写一个函数,该函数分析 bitmapdaya.compare() 的结果,以确定是否有足够的变化来保证实际对象的存在。这将有助于消除噪音并使您的面罩更准确。

于 2010-08-05T20:45:56.547 回答