2016-09-21 88 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