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;yi18.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