比较AS3像素中的位图数据以获取像素

时间:2010-03-30 10:09:17

标签: flex flash actionscript-3 bitmapdata

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

干杯

城野

2 个答案:

答案 0 :(得分:4)

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

编辑:实际上它非常直接。诀窍是使用mask参数多次应用每个通道的阈值(否则比较只是没有意义,因为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)); 之外黑色))。这是如何:

{{1}}

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

您可以通过copying the alpha channel将前景对象(“网络摄像头前面的人”)从掩码中隔离到当前视频图像。

答案 1 :(得分:0)

这里的一个问题是你想要找到一个像素是否有任何改变,如果它确实然后将该像素转换为另一种颜色(用于遮蔽)。不幸的是,网络摄像头的质量并不是很好,所以即使你的场景没有改变,来自网络摄像头的位图数据也会略有变化。因此,当您的主题进入框架...时,您将获得主体的像素更改...以及由于光照变化或相机质量而导致其他区域的噪点。您需要做的是编写一个函数,分析bitmapdaya.compare()的结果,以更改大于_____的区域,以确定是否有足够的更改来保证实际对象在那里。这将有助于消除噪音,使你的面具更准确。