首页 文章

检测到大量的损坏金钱

提问于
浏览
2

我正在开发一个应用程序来检测"damage amount"的纸币 .
该应用程序将评估用户的输入图像,并确认他们是否有权使用替换笔记 .

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

我有想法,我们用金钱相机捕捉和损坏背景是白色的,所以在AS3可以计算白色百分比的百分比 . 如果低于30%,那么在银行改变是好的 .

任何想法(计算)如何计算图像中白色的百分比?谢谢 .

-- EDIT --

我有代码@ 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 回答

  • 1

    作为SOF的新手,OP意外添加了其他问题信息作为答案 . 我把它移到了OP下的编辑中,因为我无权删除这个“答案” .

  • 0

    百分比公式为: 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可能对你有帮助 .

相关问题