2016-09-21 92 views
2

我正在研究一个应用程序来检测纸币的“损坏量”。
该应用程序将评估用户的输入图像,并确认他们是否有权替换备注。检测大量的损坏钱

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

+0

使用bitmapdata对象,这里http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/BitmapData.html – Jezzamon

+0

谢谢@Jezzamon。我现在尝试。 – Asrul

+0

你以前是否使用过像素?在该Bitmpdata API链接中,您可能需要检查“直方图”,甚至只需使用“getPixel”(它告诉您从测试像素位置的颜色)。使用'For'循环扫描每个像素,并测试它是否与白色匹配('0xFFFFF'),如此逻辑:if white == myBMPdata.getPixel(i,j)then {so add +1 to totalWhitePixels};' 。扫描完成后,将您的**总像素**与**全白像素**进行比较,然后使用数学运算来计算百分比。 –

回答

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 。我想Percentage Difference可能会帮助你。

+0

我认为问题在于,白色不是最好的颜色来检查。它需要是一个颜色,没有机会出现在笔记上的任何地方,比如0x00FF00我猜。尽管我个人认为〜18%不算太远,但对于我来说,如果您将空格放在一起,则看起来大约只有1/5的笔记缺失。 – DodgerThud

+0

@DodgerThud,以及阿斯克尔说这是为了一家银行,所以我只能假设他们已经有了这部分思想。在Google图片中,显示纸质笔记**的确实有白色**,所以不知道如果最终客户端的扫描设备会以某种方式为图片着色(彩色光?),但仍然会将扫描的像素置于白色背景上。我同意在检查前准备材料和设备很重要。 –

+0

@DodgerThud谢谢 – Asrul

0

OP是SOF的新手,无意中添加了其他问题信息作为答案。我将它移到OP下的一个编辑中,因为我没有权利删除这个“答案”。

+0

感谢您编辑@Jacksonkr。我需要这个逻辑代码:使用For循环来扫描每个像素,并测试它是否匹配白色(0xFFFFF),所以像这样的逻辑:if white == myBMPdata.getPixel(i,j)then {so add +1 to totalWhitePixels}; 。扫描完成后,将总图像像素与总白色像素进行比较,使用数学计算百分比 – Asrul