当前位置: 首页 > news >正文

VisionProC#联合编程火花塞距离检测与VisionPro操作

本章示例检测火花塞的A、B、C的距离 展示了VisionPro的操作以及C#联合编程的操作

VisionPro示例

使用的工具有:PMA模板匹配工具用来匹配多个火花塞 Fixture坐标空间转换工具 以及三个TBlock工具里面包含找线 、点到点距离、卡尺、创建线到点的平分线、点到线段的距离、文本标签显示

PMA模板训练工具 尽量找每个图片的共同特征 如有匹配不到 旋转角度 缩放打开 或调低阈值

A距离:

找线工具1 

找线工具2

在添加线段到线的距离 把找线1的线和找线2的线段的输出参数给线段到线的距离即可在文本标签显示 用的是Formatted 自定义文本 保留2位小数

效果:

B距离:

找线工具1找到上面的线

卡尺卡出这俩的边缘对

然后创建线到点的平分线

然后添加线段到线的距离 把找线1的线段 和创建出来的平分线输出的线的输出参数传给线段到线

效果:

C距离:

卡尺卡出它的边缘对

然后创建线到点的平分线 在添加点到线的距离 

我们在测A距离的时候已经找到那条线了 所以我们可以直接把找线1的线段输出过来 不需要再重新找了

C#联合编程示例

上面我们Vp已经操作完成还是在外面添加一个工具块 把这些工具拖到工具块里(上章筛子统计已经详细讲过以及注意事项)

1.还是在TBlock工具块保存 保存不带图像的保存到我们的Debug文件下 C#加载的时候使用相对路径就行

                                                           

2..程序在启动的时候加载我们的vpp方案

界面展示 我们一般都会使用cogRecordDisplay控件来显示结果图像 (前两章已经见过如何导入Winfrom控件以及cogRecordDisplay与cogDisplay区别)

前面我们说过只需要获取TBlock工具就行

 CogToolBlock tb;tb = CogSerializer.LoadObjectFromFile("火花塞.vpp")as CogToolBlock;

这里我是文件弹窗选择单个指定图片显示的用到了OpenFileDialog控件

注:转换图像一定要注意 是彩图还是灰度图 不然不会显示图片 博主当时用的彩色图片就没有显示出来最后发现是图片颜色问题

  ICogImage img;//选择图片private void button2_Click(object sender, EventArgs e){if (openFileDialog1.ShowDialog() == DialogResult.OK){Bitmap bitmp = new Bitmap(openFileDialog1.FileName);img = new CogImage8Grey(bitmp);cogRecordDisplay1.Image = img;//Fit()将缩放图像及其图形以适应显示控件。cogRecordDisplay1.Fit();tb.Inputs["OutputImage"].Value = img;}}

运行TB工具块 上章我们讲过获取结果有俩种方法 一种和vp写脚本写法一样获取工具(下面列子就是) 博主写习惯这样了 第二种方法是在vp里面把结果拖到输出参数哪里 然后自己可以修改参数名 根据参数名来获取写法跟上方赋值图片写法一样只是参数不一样 一个是输入参数 一个是输出参数

  tb.Run();cogRecordDisplay1.Record = tb.CreateLastRunRecord().SubRecords[0];//显示第一张图 也就是vp工具下拉框一堆图片 这里索引为0 就是第一张CogDistanceSegmentLineTool disA = tb.Tools["CogDistanceSegmentLineTool1"] as CogDistanceSegmentLineTool;CogDistanceSegmentLineTool disB = tb.Tools["CogDistanceSegmentLineTool2"] as CogDistanceSegmentLineTool;CogDistanceSegmentLineTool disC = tb.Tools["CogDistanceSegmentLineTool3"] as CogDistanceSegmentLineTool;label4.Text = disA.Distance .ToString("F2")+ "/cm";label5.Text = disB.Distance.ToString("F2") + "/cm";label6.Text = disC.Distance.ToString("F2") + "/cm";

第二种获取结果写法

还有一种获取结果写法 不需要获取某个工具 但是需要在vp里添加输出参数 然后把显示那个工具的值拖个输出参数即可 
注:名字一定要一样// 通过Outputs属性获取TB的输出参数// 获取TB中名称为  DianShu  的输出参数的值label2.Text = tb.Outputs["Count"].Value.ToString();
这里我没有在vp添加输出参数 所以用的第一种

在这里还写了编辑作业窗体也就是TBlock工具(Edits窗体)

 Edits edits = new Edits(img);edits.ShowDialog();

其实这里不仅光传图片的也应该传TB的vpp 因为这样的话 我们程序始终保持一个vp降低性能损耗也能避免新窗体在新建一个vp为null的问题 以及代码减少的问题 这里博主后续才考虑这些问题 就不展示修改之后的了思路已经说出来了 有兴趣的可以自己修改 或者私信博主免费领取课件

后续这种优化方案 可查看我下一篇的联合编程相机开发案例

 ICogImage img;public Edits(ICogImage img){InitializeComponent();this.img = img;}CogToolBlock tb;private void Edits_Load(object sender, EventArgs e){tb = CogSerializer.LoadObjectFromFile("火花塞.vpp") as CogToolBlock;cogToolBlockEditV21.Subject = tb;tb.Inputs["OutputImage"].Value=img;}private void button1_Click(object sender, EventArgs e){CogSerializer.SaveObjectToFile(tb, "火花塞.vpp");}

效果展示:

编辑作业窗体

完整代码:

Form1:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Cognex.VisionPro;
using Cognex.VisionPro.Dimensioning;
using Cognex.VisionPro.Display;using Cognex.VisionPro.ToolBlock;namespace 火花塞
{public partial class Form1 : Form{public Form1(){InitializeComponent();}CogToolBlock tb;ICogImage img;//选择图片private void button2_Click(object sender, EventArgs e){if (openFileDialog1.ShowDialog() == DialogResult.OK){Bitmap bitmp = new Bitmap(openFileDialog1.FileName);img = new CogImage8Grey(bitmp);cogRecordDisplay1.Image = img;//Fit()将缩放图像及其图形以适应显示控件。cogRecordDisplay1.Fit();tb.Inputs["OutputImage"].Value = img;}}//识别private void button3_Click(object sender, EventArgs e){tb.Run();cogRecordDisplay1.Record = tb.CreateLastRunRecord().SubRecords[0];CogDistanceSegmentLineTool disA = tb.Tools["CogDistanceSegmentLineTool1"] as CogDistanceSegmentLineTool;CogDistanceSegmentLineTool disB = tb.Tools["CogDistanceSegmentLineTool2"] as CogDistanceSegmentLineTool;CogDistanceSegmentLineTool disC = tb.Tools["CogDistanceSegmentLineTool3"] as CogDistanceSegmentLineTool;label4.Text = disA.Distance .ToString("F2")+ "/cm";label5.Text = disB.Distance.ToString("F2") + "/cm";label6.Text = disC.Distance.ToString("F2") + "/cm";}private void Form1_Load(object sender, EventArgs e){tb = CogSerializer.LoadObjectFromFile("火花塞.vpp")as CogToolBlock;}//编辑作业private void button1_Click(object sender, EventArgs e){Edits edits = new Edits(img);edits.ShowDialog();}}
}

Edits:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Cognex.VisionPro;
using Cognex.VisionPro.ToolBlock;namespace 火花塞
{public partial class Edits : Form{ICogImage img;public Edits(ICogImage img){InitializeComponent();this.img = img;}CogToolBlock tb;private void Edits_Load(object sender, EventArgs e){tb = CogSerializer.LoadObjectFromFile("火花塞.vpp") as CogToolBlock;cogToolBlockEditV21.Subject = tb;tb.Inputs["OutputImage"].Value=img;}private void button1_Click(object sender, EventArgs e){CogSerializer.SaveObjectToFile(tb, "火花塞.vpp");}}
}

http://www.dtcms.com/a/360202.html

相关文章:

  • libmodbus库,c++配置方法
  • 【CUDA入门·Lesson 1】Ubuntu实战:CUDA 概念、nvidia-smi 工具与 GPU 参数详解
  • 在Unity中,让子物体不随父物体移动或转动的方法!
  • 下一代防火墙(NGFW):从定义到功能
  • 试试 Xget 加速 GitHub 克隆仓库
  • 【WEB】[BUUCTF] <GXYCTF2019禁止套娃>《php函数的运用》
  • 大模型RAG项目实战:向量数据库Faiss
  • 【初始web3】什么是web3
  • 大模型时代:用Redis构建百亿级向量数据库方
  • 【自记】 Python 中函数参数前加 *(单星号)的解包可迭代对象写法说明
  • OpenCL C 内存对象
  • 第2.5节:中文大模型(文心一言、通义千问、讯飞星火)
  • 在线图片特效工具,600种创意模板
  • Python入门教程:常用第三方库Matplotlib(基本用法)下载、安装、参数解析教程
  • 案例——从零开始搭建 ASP.NET Core 健康检查实例
  • 【MLLM】语音端到端大模型和Voice Agent发展
  • 【Java进阶】Java与SpringBoot线程池深度优化指南
  • GitHub 热榜项目 - 日榜(2025-08-31)
  • 【AI编程工具】使用Cursor快速搭建一套小型项目管理系统
  • mysql5.7.44安装遇到登录权限问题
  • 在Linux环境安装Maven(保姆级别)
  • macos调用chrome后台下载wasm-binaries.tar.xz
  • k8s---prometheus 监控
  • AI大模型实战解析-RAG知识库+LangChain项目实战
  • 《SVA断言系统学习之路》【01】即时断言概览
  • IDM(Internet Download Managerv 6.38)破除解版下载!IDM 下载器永久免费版!提升下载速度达5倍!安装及使用
  • 深入解析Linux系统中的/etc/hosts文件
  • 刷题日记0831
  • 盲孔轴旋转编码器轴设计与加工的几个注意事项
  • 网络爬虫是自动从互联网上采集数据的程序