项目要求
项目要求:统计硬币金额,并将结果显示在界面上
有1角、5角、1元以及他们的正反面图像
项目流程:
硬币金额统计(工具实现)
模板训练
-
新建项目,保存为:01硬币金额统计(无脚本).vpp
-
导入图像:img文件夹
-
导入PMA工具指定链接图象源,并修改名称为:PMA-yiyuan
-
设置PMA-yiyuan
- 找一个图片源比较合适的一元图像
- 抓取图像,设置为当前训练图
- 设置训练中心原点
- 设置训练中心原点
- 设置查找概数:2
- 找一个图片源比较合适的一元图像
-
因为一元是有正反面,我们需要在这里做一下:图像掩模
- 选择工具:矩形工具
- 填充当前选项:注意红色部分表示是当前我们不感兴趣的细节(忽略掩膜像素颜色)
- 选择工具:笔刷,调整笔刷大小,关注未掩膜像素颜色
- 应用
- 选择工具:矩形工具
-
训练
-
图形:显示精细。发现寻找的就是内外的边线
-
查看结果1
-
把 PMA-yiyuan 赋值一份:
- 设置图像输入源:链接自:Image Source.OutputImage
- 重命名:PMA-wujiao
- 寻找一张五角合适的图像
-
抓取训练图像(设置中心原点)
-
设置掩膜
-
打开掩膜工具,先清除上次的掩膜
-
制作掩膜:工具:矩形工具(框选)
-
擦出关注的掩膜的颜色:工具:笔刷,选择关注的颜色,调整笔刷大小
-
点击应用 -> 确定
-
-
点击训练(图形->显示精细)
-
测试结果
-
赋值一份 PMA-wujiao(同理制作):PMA-yijiao
-
训练结果(如果有对应的硬币没训练出来,重新做训练,重新做掩膜)
-
修改概数值(把所有的都运行一下,看看是否都找得到)
添加结果分析工具
-
添加结果分析工具:CogResultsAnalysisTool
-
给上面的一元,五角,一角添加统计结果数:右键 -> 添加终端 (同理:给其他两个也添加一下)
-
设置分析工具:添加3个输入
-
修改参数名称
-
把上面的匹配结果拖拽给分析工具
-
添加统计表达式
-
添加表达式
-
添加表达式逻辑
-
修改表达式名称
-
-
需要把结果累加一下,继续添加表达式
- 添加两个表达式,并修改名称为:money12和money123,分别表示:1圆+五角+1角
- 添加两个表达式,并修改名称为:money12和money123,分别表示:1圆+五角+1角
-
把 money123 添加为输出:
-
点击运行,查看 money123 结果
把统计结果显示出来
-
添加显示控件:CogCreateGraphicLabelTool
-
设置图像源:链接自(Source Image.OutputImage)
-
把 统计分析的结果 money123 拖拽到 Label 的 InputDouble 上(发现拖拽不了)
-
拖拽不了的解决办法:
-
选中 CogResultsAnalysisTool 上右键 -> 选择 添加终端…… ->
-
浏览:所有未过滤
-
找到 Result -> EvaluateExpressions -> Item[money123] -> Value -> Double 添加输出
-
-
把上面的结果拖拽到 Label 控件的 Double 上、
-
双击 CogCreateGraphicLabelTool,把内容 -> 选择器 -> InputDouble 类型
-
修改 Label 的位置
-
修改字体大小和字体颜色:红色,三号
-
修改文本格式:总金额:{D:F1}
自行拓展![自行拓展](https://i-blog.csdnimg.cn/direct/b32f9f229895471fa88df9c7f765f00e.png#pic_center)
硬币金额统计(脚本实现)
前面的话,我们已经实现了没有脚本的统计与显示,加下来演示一下有脚本的情况。
-
把上节课的 CogCreateGraphicLabelTool 删除
-
添加一个 CogToolBlock 控件
-
把我们的工具都拖进去
-
把图像拖给 CogToolBlock,重新设置一下输入源
-
打开 CogToolBlock 的高级 C# 脚本
-
脚本实现:
// 1.添加一个 Label
CogGraphicLabel myLabel = new CogGraphicLabel();
// ……
// 2. 设置Label坐标
myLabel.SetXYText(0, 0, "Hello World");
// ……
// 3.添加 Label
mToolBlock.AddGraphicToRunRecord(myLabel,lastRecord,"PMA-yiyuan.InputImage","");
- 脚本实现:
// 1.添加一个 Label
CogGraphicLabel myLabel = new CogGraphicLabel();
// ……
// 获取统计结果工具
CogResultsAnalysisTool c = mToolBlock.Tools["CogResultsAnalysisTool1"] as CogResultsAnalysisTool;
// 2. 设置Label坐标
myLabel.SetXYText(100, 100, "总金额:" + c.Result.EvaluatedExpressions["money123"].Value.ToString());
// 自行设计字体的大小和颜色
// ……
// 3.添加 Label
mToolBlock.AddGraphicToRunRecord(myLabel,lastRecord,"PMA-yiyuan.InputImage","");
- 把每一种硬币的个数都展示出来怎么做,两种做法:
- 利用一个 Label 拼接
- 创建多个 Label 分别展示(自行完成)
- 继续修改代码:
// 1.添加一个 Label
CogGraphicLabel myLabel = new CogGraphicLabel();
// ……
// 获取统计结果工具
CogResultsAnalysisTool c = mToolBlock.Tools["CogResultsAnalysisTool1"] as CogResultsAnalysisTool;
// 2. 设置Label坐标
myLabel.SetXYText(350, 100, "1元个数:" + c.Result.EvaluatedExpressions["yiyuan"].Value.ToString() +
",5角个数:" + c.Result.EvaluatedExpressions["wujiao"].Value.ToString() +
",1角个数:" + c.Result.EvaluatedExpressions["yijiao"].Value.ToString() +
",总金额:" + c.Result.EvaluatedExpressions["money123"].Value.ToString());
myLabel.Color = CogColorConstants.Red;
// ……
// 3.添加 Label
mToolBlock.AddGraphicToRunRecord(myLabel,lastRecord,"PMA-yiyuan.InputImage","");