Actionscript 3 发现大量金钱损失

Actionscript 3 发现大量金钱损失,actionscript-3,image-processing,computer-vision,Actionscript 3,Image Processing,Computer Vision,我正在开发一个应用程序来检测纸币的“损坏量” 该应用程序将评估用户的输入图像,并确认他们是否有权获得替换说明 输出为:如果30%的失钱对象,可以允许在银行进行兑换 我有一个主意,我们用相机拍摄的钱和损坏的背景是白色的,所以在AS3可以计算出白色的百分比。如果低于30%,那么最好在银行兑换 关于如何计算图像中白色的百分比有什么想法吗?。谢谢 --编辑-- 我有代码@VC.One,你可以更正一下吗?谢谢 import flash.media.Camera; import flash.med

我正在开发一个应用程序来检测纸币的“损坏量”
该应用程序将评估用户的输入图像,并确认他们是否有权获得替换说明

输出为:
如果30%的失钱对象,可以允许在银行进行兑换

我有一个主意,我们用相机拍摄的钱和损坏的背景是白色的,所以在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); } } 导入flash.media.Camera; 导入flash.media.Video; 导入flash.display.BitmapData; 导入flash.display.Bitmap; 导入flash.display.Sprite; 导入flash.events.MouseEvent; 导入flash.text.TextField; var camMoney:Camera=Camera.getCamera(); camMoney.setQuality(01100); 设置模式(480、300、30,真); var vidMoney:Video=新视频(480300) vidMoney.x=0; vidMoney.y=10; addChild(vidMoney); 摄像机(camMoney); var moneyBD:BitmapData=新的BitmapData(vidMoney.width、vidMoney.height); var moneyBM:Bitmap=新位图(moneyBD); moneyBM.x=0; 货币bm.y=376; addChild(moneyBM); 变量循环:Sprite=新Sprite(); 圆形。图形。线型(2,0xFFFFFF); circle.graphics.beginll(0x000000); 圆。图形。画圈(22534020); circle.graphics.endFill(); addChild(圆圈); circle.buttonMode=true; circle.addEventListener(MouseEvent.CLICK,捕获); 函数捕获(e:MouseEvent):void{ moneyBD.提款(vidMoney); } var circleRect:Sprite=新Sprite(); circleRect图形线条样式(2,0xFFFFFF); 循环图.beginll(0xFF0000); 圆形图.drawRoundRect(260、320、60、40、30); circleRect.graphics.endFill(); addChild(circleRect); circleRect.buttonMode=true; circleRect.addEventListener(MouseEvent.CLICK,analisa); 函数analisa(e:MouseEvent):void{ var-xi:int; var-yi:int; var像素:uint; var颜色:uint; var pointsWhite:Array=[]; 对于(X= 0;席席=2){ var lengthOfWhiteSpace:int=pointGroup[pointGroup.length-1].x-pointGroup[0].x; var t:TextField=newtextfield(); t、 x=点组[0].x; t、 y=点组[0]。y; addChild(t); } }
该OP是SOF的新成员,无意中添加了额外的问题信息作为答案。我将其移动到OP下的编辑中,因为我没有删除此“答案”的权限。

百分比公式是:
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) + "%";

}
函数analisa(e:MouseEvent=null):无效 { var-xi:int=0;var-yi:int=0;var-pixel:uint=0; var totalPixels_图像:int=0; var totalPixels_white:int=0; var PercentWhitePixels:Number=0; //#获取总像素 totalPixels_image=bmpData.width*bmpData.height; //#获取全部白色像素 用于(yi=0;yi 对我来说,您图像的结果是0.1895…。但是从我的眼睛看,我认为5%到10%的数字看起来更正确(不是这个计算的0.18%)。如果将结果乘以100,它将变成
18.95%
,但现在这似乎太多了

我认为需要一个额外的或不同的计算,当我以后想到一些事情时,我会更新,但这个答案应该可以帮助你开始

考虑检查:

1)

2)我想可能会对您有所帮助。

使用bitmapdata对象,谢谢@Jezzamon。我现在试试。你以前用过像素吗?在该Bitmpdata API链接中,您可能希望检查
直方图
,甚至只需使用
getPixel
(它告诉您测试像素位置的颜色)。使用
For
循环扫描每个像素并测试它是否匹配白色(
0xFFFFF
),这样的逻辑如下:
如果白色==myBMPdata.getPixel(i,j),然后{so add+1 to totalWhitePixels}。扫描完成后,比较图像总像素与白色总像素,使用数学计算百分比。谢谢@VC.One为您编辑并给出答案。我现在工作。谢谢你solution@VC.One你能纠正我的AS3:谢谢你编辑@Jacksonkr。我需要这个逻辑代码:使用For循环扫描每个像素并测试它是否匹配白色(0xFFFFF),这样的逻辑是:如果白色==myBMPdata.getPixel(I,j),那么{so add+1 to totalWhitePixels};。扫描完成后,将图像总像素与白色总像素进行比较,使用数学计算百分比我认为问题在于白色不是最好的检查颜色。它需要是一种不会出现在便笺上任何地方的颜色,如0x00FF00 I gue