比较两个图像并检查相等性

时间:2012-11-15 16:22:06

标签: actionscript-3 flash image-processing

您是否知道有关在as3 / flash中比较图像的任何来源或信息?

我想比较两个图像并检查图像是否相同。

检查此示例: http://imageshack.us/photo/my-images/825/imagecompare.jpg/

任何线索?提前谢谢!

3 个答案:

答案 0 :(得分:3)

除了重复的答案,

我相信你也可以使用BitmapData.compare()

从链接中获取的示例,请考虑以下两个BitmapData对象:

 var bmd1:BitmapData = new BitmapData(50, 50, true, 0xFFFF8800);
 var bmd2:BitmapData = new BitmapData(50, 50, true, 0xCCCC6600);
 var diffBmpData:BitmapData = bmd1.compare(bmd2) as BitmapData;
 trace ("0x" + diffBmpData.getPixel(0,0).toString(16); // 0x332200

代码示例(用于百分比差异):

结果是多么正确,这是我酿造的百分比:

var bmd1:BitmapData = new BitmapData(225, 225);
bmd1.draw(mc1);
var bmd2:BitmapData = new BitmapData(225, 225);
bmd2.draw(mc2);

var diffBmpData:BitmapData = bmd1.compare(bmd2) as BitmapData;

var diff:int = 0;
var total:int = 225 * 225;

for(var i=0; i<225; i++)
    for(var j=0; j<225; j++)
        diff += (diffBmpData.getPixel(i,j) != 0)? 1 : 0; 

info.text = Math.round((diff / total * 100)).toString();

其中:信息是一个TextBox, mc1 &amp; mc2 是舞台上的两个动画片段。

我认为你可以通过比较单个值(即一个像素有多少不同)而不是布尔像素相似匹配来改善它。


结果:(包含圆形图像周围的空白区域)

enter image description here

答案 1 :(得分:3)

如果像素值相同,则使用BitmapData.compare()将返回0

trace(bmd1.compare(bmd2)); // 0

答案 2 :(得分:0)

除了loxxy&amp; xLite的答案,如果您需要知道如何从图像文件中获取BitmapData:

var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaded);

loader.load( new URLRequest ( "http://www.fake.url.path/image.jpg" ) );

function onLoaded(e:Event):void {
    var bmp:Bitmap = loader.content as Bitmap;
    var bitmapData:BitmapData = bmp.data; 
    //bitmapData.Compare(...)
}

另见loading image by Loader.loadBytes(byteArray)