检测大笔伤害钱
Posted
技术标签:
【中文标题】检测大笔伤害钱【英文标题】:Detect large of damage money 【发布时间】:2017-01-29 15:45:38 【问题描述】:我正在开发一个应用程序来检测纸币的“损坏量”。 该应用程序将评估用户的输入图像,并确认他们是否有权更换笔记。
输出为:if 30% of lost of money object, can allow changing at the bank
。
我有想法,我们用钱的相机进行捕捉,损坏的背景是白色的,所以在 AS3 中可以计算白色的百分比。如果低于 30%,那么可以在银行进行更改。
关于如何计算图像中白色百分比的任何想法(计算)?谢谢。
-- 编辑--
我有代码@VC.One,你可以更正一下吗?谢谢。
导入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(0, 100); camMoney.setMode(480, 300, 30, true); var vidMoney: 视频 = 新视频 (480, 300) vidMoney.x = 0; vidMoney.y = 10; addChild(vidMoney); vidMoney.attachCamera(camMoney); var moneyBD: BitmapData = new BitmapData(vidMoney.width, vidMoney.height); var moneyBM: 位图 = 新位图(moneyBD); 钱BM.x = 0; 金钱BM.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.buttonMode = true; circle.addEventListener(MouseEvent.CLICK,捕获); 函数捕获(e:MouseEvent):无效 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); 函数分析(e:MouseEvent):无效 变量 xi: 整数; var yi: int; var 像素:uint; 变量颜色:uint; var pointsWhite: 数组 = []; 对于(xi = 0;xi = 2) var lengthOfWhiteSpace: int = pointGroup[pointGroup.length - 1].x - pointGroup[0].x; var t: TextField = new TextField(); t.x = 点组[0].x; t.y = 点组[0].y; addChild(t);【问题讨论】:
使用位图数据对象,这里help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/… 感谢@Jezzamon。我现在试试。 您以前使用过像素吗?在该 Bitmpdata API 链接中,您可能想要检查histogram
甚至只是使用 getPixel
(它告诉您来自测试像素位置的颜色)。使用For
循环扫描每个像素并测试它是否匹配白色 (0xFFFFF
),所以逻辑如下:if white == myBMPdata.getPixel( i, j ) then so add +1 to totalWhitePixels ;
。扫描完成后,比较您的图像总像素与白色总像素,使用数学计算百分比。
感谢@VC.One 的编辑和回答。我现在在工作。感谢您提供出色的解决方案
@VC.One 你能纠正我的 AS3:
【参考方案1】:
OP 是 SOF 的新手,意外添加了额外的问题信息作为答案。我将其移至 OP 下的编辑中,因为我无权删除此“答案”。
【讨论】:
感谢您编辑@Jacksonkr。我需要这个逻辑代码:使用 For 循环扫描每个像素并测试它是否与白色 (0xFFFFF) 匹配,因此逻辑如下: if white == myBMPdata.getPixel( i, j ) then so add +1 to totalWhitePixels ; .扫描完成后,比较您的总图像像素与总白色像素,使用数学计算百分比【参考方案2】:百分比公式为: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 可能会对您有所帮助。
【讨论】:
我认为问题在于白色不是最好的检查颜色。它必须是一种不可能出现在笔记上任何地方的颜色,比如我猜的 0x00FF00。虽然我个人认为 ~18% 并不算太远,但对我来说,如果你把空白放在一起,看起来大约有五分之一的音符丢失了。 @DodgerThud,好吧,Asker 说这是给银行的,所以我只能假设他们已经考虑过这部分。在 Google 图片中,显示的纸质笔记实际上有白色,所以不知道最终客户端的扫描设备是否会以某种方式对图片进行着色(彩色光?)但仍将扫描的像素放在白色背景上。我同意检查前准备材料和设备很重要。 @VC.One 我只是尝试一下代码,问题是,来自相机的位图数据不是纯白色 0xffffff,所以我有解决方案来制作从 0xffffff 到灰色 10% 或其他的范围,所以可以你帮我吗? @Asrul 显示指向您的示例相机图像的链接。 感谢@VC.One 的快速响应。这是来自应用程序相机的我的链接示例图像:i67.tinypic.com/2j5jfhl.jpg,请也给我,如何在设备上捕获后存储图像并在 android 上默认发送电子邮件。谢谢。以上是关于检测大笔伤害钱的主要内容,如果未能解决你的问题,请参考以下文章