【机械视觉】C#+VisionPro联合编程———【五、硬币检测小项目实现(C#+VisionPro联合编程和csv文件格式操作)】

news/2025/3/16 4:47:47/

【机械视觉】C#+VisionPro联合编程———【五、硬币检测小项目实现(C#+VisionPro联合编程和csv文件格式操作)】

项目介绍

总共有十二张检测的图片,当点击检测按钮时检测当前展示的图片并且将检测效果展示在表格中,当点击上一页或下一页时换检测图片,点击保存本地时通过csv文件格式将表格数据保存,当下一次运行时将数据读取出来并且展示在表格中。

此项目通过异步进行优化,在加载时改变了以往卡顿的情况,加载变得流畅。

此项目检测时的逻辑代码是在visionPro中完成的。

所用的控件:

  • cogRecordDisplay
  • dataGridView
  • button
  • label

实现项目

第一步、创建toolblock工具,并且在其中训练检测工具。(并且保存)

三个匹配工具分别匹配一元一角五角,然后将匹配数量赋值给结果分析工具,通过结果分析工具计算出总和。

其中用到了结果分析工具(CogResultsAnalysisTool1),一下是构造:

第二步、创建winform项目,并且搭建界面:

第三步、编写代码:(以下是源码)

public partial class Form1 : Form
{public Form1(){InitializeComponent();}CogToolBlock tb = new CogToolBlock(); int numPage = 1; // 图片页数string fileName = "./硬币/"; // 路径/// <summary>/// 加载/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void Form1_Load(object sender, EventArgs e){Task.Run(() =>{tb = (CogToolBlock)CogSerializer.LoadObjectFromFile("./硬币检测.vpp");});this.Invoke(new Action(() => {ConvertImage();this.labelPageMaxNum.Text = "最大页数为: 12";string[][] strings = csvSave("./data.csv");if (strings!=null){for (int i = 1; i < strings.Length; i++){this.dataGridView1.Rows.Add(strings[i]);}}}));}/// <summary>/// 检测/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void buttonDetection_Click(object sender, EventArgs e){tb.Inputs["OutputImage"].Value = this.cogRecordDisplay1.Image;tb.Run();this.cogRecordDisplay1.Record = tb.CreateLastRunRecord().SubRecords[0];CogPMAlignTool pma1 = tb.Tools[1] as CogPMAlignTool;CogPMAlignTool pma2 = tb.Tools[2] as CogPMAlignTool;CogPMAlignTool pma3 = tb.Tools[3] as CogPMAlignTool;this.dataGridView1.Rows.Add(new string[] { DateTime.Now.ToString(), "凹凸曼", pma1.Results.Count.ToString(),pma2.Results.Count.ToString(),pma3.Results.Count.ToString(), tb.Outputs["YuanCount"].Value.ToString() });}/// <summary>/// 上一页/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void buttonTopPage_Click(object sender, EventArgs e){if (numPage>1){numPage -= 1;ConvertImage();}else{System.Windows.Forms.MessageBox.Show("当前为第一页");}}/// <summary>/// 下一页/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void buttonBottomPage_Click(object sender, EventArgs e){if (numPage < 12){numPage += 1;ConvertImage();}else{System.Windows.Forms.MessageBox.Show("当前为最后一页");}}/// <summary>/// 换图片/// </summary>private void ConvertImage(){Bitmap bitmap = new Bitmap(fileName + numPage + ".bmp");this.cogRecordDisplay1.Image = new CogImage24PlanarColor(bitmap);this.cogRecordDisplay1.Fit();this.labelPageShow.Text = $"第{numPage}页";}/// <summary>/// 保存本地/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void buttonSave_Click(object sender, EventArgs e){if(this.dataGridView1.Rows.Count < 1){System.Windows.Forms.MessageBox.Show("没有数据");return;}using (FileStream fs = new FileStream("./data.csv", FileMode.Create))using (StreamWriter sw = new StreamWriter(fs, Encoding.UTF8)){sw.WriteLine("测量时间,管理员,一元个数,一角个数,五角个数,总和");for (int i = 0;i<this.dataGridView1.Rows.Count;i++){StringBuilder sb = new StringBuilder();for (int j = 0; j < this.dataGridView1.Columns.Count; j++){if(j== this.dataGridView1.Columns.Count-1) sb.Append(this.dataGridView1.Rows[i].Cells[j].Value);else sb.Append(this.dataGridView1.Rows[i].Cells[j].Value+",");}sw.WriteLine(sb.ToString());}System.Windows.Forms.MessageBox.Show("保存成功");            }}private string[][] csvSave(string filename){try{using (StreamReader sr = new StreamReader(filename, Encoding.UTF8)){string strVal = sr.ReadToEnd().Trim();string[] vals = strVal.Split('\n');string[][] lines = new string[vals.Length][];for (int i = 0; i < vals.Length; i++){lines[i] = vals[i].Split(',');}return lines;}}catch (Exception ex){System.Windows.Forms.MessageBox.Show(ex.Message);}return null;}}


http://www.ppmy.cn/news/1579493.html

相关文章

G-Star 公益行起航,挥动开源技术点亮公益!

公益组织&#xff0c;一直是社会温暖的传递者&#xff0c;但在数字化浪潮中&#xff0c;也面临着诸多比大众想象中复杂的挑战&#xff1a;项目管理如何更高效&#xff1f;志愿者管理又该如何创新&#xff1f;宣传推广怎么才能更有影响力&#xff1f;内部管理和技术支持又该如何…

通过qemu仿真树莓派系统调试IoT固件和程序

通过qemu仿真树莓派系统调试IoT固件和程序 本文将介绍如何使用 QEMU 模拟器在 x86 架构的主机上运行 Raspberry Pi OS&#xff08;树莓派操作系统&#xff09;。我们将从下载镜像、提取内核和设备树文件&#xff0c;到启动模拟环境&#xff0c;并进行一些常见的操作&#xff0…

微软 System Center Configuration Manager(SCCM)的组件文件

微软 System Center Configuration Manager(SCCM) 或 Microsoft Endpoint Configuration Manager(MECM) 的组件文件,属于企业级设备管理工具的一部分。以下是具体说明: C:\Windows\CCM\smsswd.exe C:\Windows\CCM\tsmanager.exe smsswd.exe 和 tsmanager.exe 是 Micros…

Excel(函数篇):Vlookup函数 详细用法

目录 Vlookup函数基础用法精确查找易错问题员工信息查询表 进阶用法近似匹配&#xff08;模糊查找&#xff09;结合通配符查找反向查找 高级技巧多条件查找动态列查询 错误处理屏蔽错误值处理数字/文本格式问题注意事项常见错误解决方案 拓展用法跨表与跨工作簿查找查找返回多列…

机器学习-----决策树

文章目录 1、概念2. 决策树的构建过程2.1 特征选择2.2 树的生成2.3 树的剪枝 3. 决策树的优缺点4. 决策树的应用4.1 分类任务4.2 回归任务4.3 集成学习 代码示例 总结 1、概念 1.1决策树是什么 决策树是通过对样本的训练&#xff0c;建立出分类规则&#xff0c;并对新样本进行…

Spring Cloud Config - 动态配置管理与高可用治理

引言&#xff1a;为什么需要配置中心&#xff1f; 在微服务架构中&#xff0c;配置管理面临分散化、多环境、动态更新三大挑战。传统基于application.yml等配置文件的硬编码方式&#xff0c;导致以下问题&#xff1a; • 环境差异&#xff1a;开发、测试、生产环境配置混杂&a…

TI的Doppler-Azimuth架构(TI文档)

TI在AWR2944平台上推出新的算法架构&#xff0c;原先的处理方式是做完二维FFT后在RD图上做CFAR检测&#xff0c;然后提取各个通道数据做测角。 Doppler-Azimuth架构则是做完二维FFT后&#xff0c;再做角度维FFT&#xff0c;生成Doppler-Azimuth频谱图&#xff0c;然后在该频谱图…

【Go | 从0实现简单分布式缓存】-6:GeeCache总结

本文目录 序1. LRU缓存淘汰策略LFU策略LRU策略LRU算法实现核心数据结构新增节点功能查找功能删除节点返回链表的长度 单测 2. 单机并发缓存只读缓存ByteView并发特性核心数据结构Group回调函数GetterGroup定义Group的Get方法 单测 3. HTTP服务端serverHTTP方法单测 4. 一致性哈…