检测到大量的损坏金钱

时间:2016-09-21 11:48:56

标签: actionscript-3 image-processing computer-vision

我正在开发一款应用来检测纸币的“损失金额”。
该应用程序将评估用户的输入图像,并确认他们是否有权使用替换笔记。

输出为: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);
        }
    }

2 个答案:

答案 0 :(得分:1)

百分比公式为: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可能会对您有所帮助。

答案 1 :(得分:0)

作为SOF的新手,OP意外地添加了其他问题信息作为答案。我把它移到了OP下的编辑中,因为我无权删除这个&#34;回答&#34;。