检测大量损坏金钱

Detect large of damage money

我正在开发一款检测 "damage amount" 纸币的应用程序。
该应用程序将评估用户输入的图像,并确认他们是否有权更换纸币。

输出为:if 30% of lost of money object, can allow changing at the bank

我有想法,我们用相机拍摄金钱并且损坏背景是白色的,所以在 AS3 中可以计算白色的百分比。如果低于30%那么最好换银行。

知道如何计算图像中白色的百分比吗?谢谢

-- 编辑 --

我有代码@VC.One,你可以更正一下吗?谢谢


    import flash.media.Camera;
    import flash.media.Video;
    import flash.display.BitmapData;
    import flash.display.Bitmap;
    import flash.display.Sprite;
    import flash.events.MouseEvent;
    import flash.text.TextField;

    var camMoney: Camera = Camera.getCamera();
    camMoney.setQuality(0, 100);
    camMoney.setMode(480, 300, 30, true);
    var vidMoney: Video = new Video(480, 300)
    vidMoney.x = 0;
    vidMoney.y = 10;
    addChild(vidMoney);
    vidMoney.attachCamera(camMoney);

    var moneyBD: BitmapData = new BitmapData(vidMoney.width, vidMoney.height);

    var moneyBM: Bitmap = new Bitmap(moneyBD);
    moneyBM.x = 0;
    moneyBM.y = 376;
    addChild(moneyBM);

    var circle: Sprite = new Sprite();
    circle.graphics.lineStyle(2, 0xFFFFFF);
    circle.graphics.beginFill(0x000000);
    circle.graphics.drawCircle(225, 340, 20);
    circle.graphics.endFill();
    addChild(circle);
    circle.buttonMode = true;
    circle.addEventListener(MouseEvent.CLICK, capture);
    function capture(e: MouseEvent): void {
        moneyBD.draw(vidMoney);
    }

    var circleRect: Sprite = new Sprite();
    circleRect.graphics.lineStyle(2, 0xFFFFFF);
    circleRect.graphics.beginFill(0xFF0000);
    circleRect.graphics.drawRoundRect(260, 320, 60, 40, 30);
    circleRect.graphics.endFill();
    addChild(circleRect);
    circleRect.buttonMode = true;
    circleRect.addEventListener(MouseEvent.CLICK, analisa);
    function analisa(e: MouseEvent): void {
        var xi: int;
        var yi: int;
        var pixel: uint;
        var color: uint;
        var pointsWhite: Array = [];
        for (xi = 0; xi = 2) {
            var lengthOfWhiteSpace: int = pointGroup[pointGroup.length - 1].x - pointGroup[0].x;
            var t: TextField = new TextField();
            t.x = pointGroup[0].x;
            t.y = pointGroup[0].y;
            addChild(t);
        }
    }

OP 是 SOF 的新手,不小心添加了额外的问题信息作为答案。我将其移至 OP 下的编辑中,因为我无权删除此 "answer".

百分比公式为:amountFound * 100 / amountTotal

例如,如果您将 200 美元放在某处,但只找到 50 美元。执行 50 * 100 / 200 表示您找到了 25%。如果您又找到了 50 美元(现在是 100 美元),它会告诉您您得到了 200 美元的 50%。

有了这个基本公式,您就可以像这样将它用于您的 Analisa 函数...

function analisa(e:MouseEvent = null) : void 
{
    var xi: int=0; var yi: int=0; var pixel: uint=0;

    var totalPixels_image : int = 0;
    var totalPixels_white : int = 0;
    var PercentWhitePixels : Number = 0;

    //# get total pixels
    totalPixels_image = bmpData.width * bmpData.height;

    //# get total white pixels
    for (yi = 0; yi < bmpData.height; yi++) 
    {
        for (xi = 0; xi < bmpData.width; xi++) 
        {
            pixel = bmpData.getPixel( xi, yi );

            if ( pixel == 0xFFFFFF)
            {
                totalPixels_white += 1; //++;
            }
        }
    }

    PercentWhitePixels = ( (totalPixels_white * 100) / totalPixels_image);

    //# get results 
    trace("=== RESULTS =================================");
    trace("Image Width  : " + bmpData.width );
    trace("Image Height : " + bmpData.height );
    trace("total Pixels in Image  : " + totalPixels_image);
    trace("total Pixels of White  : " + totalPixels_white);
    trace("Percentage of White    : " + PercentWhitePixels) + "%";

}

对我来说,你的图像的结果是 0.1895...。但从我的眼睛来看,我认为大约 5% 到 10% 看起来 更正确(不是这个计算的 0.18%)。如果将结果乘以 100,它将变为 18.95%,但现在看起来太多了。

我认为需要额外或不同的计算,我会在以后想到什么时更新,但这个答案应该可以帮助您开始..

PS 考虑检查一下:

1)Percentage: Difference vs Error
2)我想Percentage Difference可能对你有帮助。