尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

VP+C# 机器视觉 联合编程入门

VP+C# 机器视觉 联合编程入门 谷琳烨图片文件E:\DISK1\VisionPro\Images先配置号vp组件比如像我这样。还要这个输出数量加上。我们保存Job作业的方式保存因为我们的代码后面要操作Job文件。打开Visual Studio的C#窗口开发模式。然后开启目标平台设置成X64因为Cognex VisionPro的所有底层库Cognex.VisionPro.dll等是原生 64 位非托管 C 写的没有 32 位版本。AnyCPU的坑新版 VS (.NET Framework)AnyCPU 默认优先跑 32 位在 64 位 Windows 上也启动 32 位进程32 位进程无法加载 64 位的 VisionPro 原生 dll直接报错。我们导入DLL组件一般DLL组件在Vp软件下的软件录的VisionPro\ReferencedAssemblies首先我们引入图像显示控件它的类型是CogRecordDisplay技术文档查阅控件的属性属性类型作用LocationPoint控件左上角 X,Y 坐标SizeSize控件宽、高DockDockStyle停靠填充Fill 填满父容器AutoFitbool图像自动适配控件大小ShowToolbarbool显示 / 隐藏 VP 工具栏ShowScrollBarsbool滚动条开关BackColorColor控件背景色ImageICogImage只显示图像不画检测标记RecordCogRecord传入工具运行记录图像 检测图形一起显示由于添加组件库控件托入太卡了所有使用代码导入的方式去添加组件。创建显示控件创建CogRecordDisplay需要导入相关的dll才可以创建。引用加入DLLDLL文件名核心内容命名空间作用✅Cognex.VisionPro.Display.Controls.dll状态栏、信息条控件Cognex.VisionPro.Display.Controls提供CogDisplayStatusBar显示鼠标坐标、像素信息不包含图像显示窗口 CogRecordDisplay。属于附属 UI 组件。✅Cognex.VisionPro.Controls.dll图像窗口 UI 控件Cognex.VisionPro.Controls存放CogRecordDisplay你的图像显示窗口VisionPro 所有 WinForm 视觉界面控件全部在这里。✅Cognex.VisionPro.dll图像、数据、工具基类Cognex.VisionPro业务数据层CogImage8Grey图像、CogRecord记录、几何图形、标定、VPP 工具块CogToolBlock。没有任何 UI 界面。这三个一定要引用引用上之后你导一个using Cognex.VisionPro;就可以用了因为它底层会自动联合起来。需要using Cognex.VisionPro;private void CreateVpDisplay(){//实例化对象 new_recordDisplay new CogRecordDisplay();//常用属性_recordDisplay.Location new Point(20, 20); //控件左上角坐标_recordDisplay.Size new Size(360, 360); //控件宽高_recordDisplay.BackColor Color.Black; //控件背景颜色//将控件加入容器二选一this.Controls.Add(_recordDisplay); //直接加到Form窗体}然后在给他加个全局方便设置数据private CogRecordDisplay _recordDisplay;创建图片预览创建显示控件导入dll导入包using Cognex.VisionPro.ImageFile;//测试显示图片int count 0;private void button1_Click(object sender, EventArgs e){CogImageFileCDB idb new CogImageFileCDB();idb.Open(E:\DISK1\VisionPro\Images\2DSymbol.idb,CogImageFileModeConstants.Read);if (count idb.Count) count 0;//读取第count张图片 例如读取第一张图片》idb[0]ICogImage img idb[count];//显示图片_recordDisplay.Image img;//自动适应窗口_recordDisplay.Fit();count;}加载VPP文件我加载的Job的VPP文件需要导入using Cognex.VisionPro.ToolBlock;对应dllCognex.VisionPro.ToolGroup.dll代码private void button2_Click(object sender, EventArgs e){//vpp文件路径string path textBox2.Text;//从vpp文件中加载VisionPro对象//返回类型是object所以需要转换成具体工具类型//加载QuickBuild Jobjob (CogJob)CogSerializer.LoadObjectFromFile(path);//提示加载成功MessageBox.Show(Job加载成功);}加载vpp转换jop出现问题。引入using Cognex.VisionPro.QuickBuild;查看获取job的控件private void button4_Click(object sender, EventArgs e){if (job null){MessageBox.Show(请先加载Job);return;}//获取外层ToolGroupCogToolGroup group job.VisionTool as CogToolGroup;//查看ToolGroup里面的工具foreach (ICogTool tool in group.Tools){Debug.WriteLine(外层工具名称 tool.Name 类型 tool.GetType().Name);}}查看CogToolBlock1里面都有什么工具private void button3_Click(object sender, EventArgs e){if (job null){MessageBox.Show(请先加载Job);return;}//获取ToolGroupCogToolGroup group job.VisionTool as CogToolGroup;//获取ToolBlockCogToolBlock block group.Tools[CogToolBlock1] as CogToolBlock;//遍历ToolBlock里面的工具foreach (ICogTool tool in block.Tools){Debug.WriteLine(工具名称 tool.Name 类型 tool.GetType().Name);}}获取参数//获取PMAlign工具的运行结果private void button5_Click_1(object sender, EventArgs e){if (job null){MessageBox.Show(请先加载Job);return;}//获取ToolGroupCogToolGroup group job.VisionTool as CogToolGroup;//获取ToolBlockCogToolBlock block group.Tools[CogToolBlock1] as CogToolBlock;//判断是否获取成功if (block null){MessageBox.Show(没有找到CogToolBlock1);return;}//给ToolBlock输入图片block.Inputs[OutputImage].Value _recordDisplay1.Image;//运行ToolBlockblock.Run();//显示运行结果_recordDisplay2.Record block.CreateLastRunRecord();//自动适应窗口_recordDisplay2.Fit();//获取PMAlign工具CogPMAlignTool pmTool block.Tools[CogPMAlignTool1] as CogPMAlignTool;if (pmTool ! null pmTool.Results.Count 0){//获取匹配结果CogTransform2DLinear pose pmTool.Results[0].GetPose();Debug.WriteLine(匹配成功);Debug.WriteLine(X坐标 pose.TranslationX);Debug.WriteLine(Y坐标 pose.TranslationY);Debug.WriteLine(角度 pose.Rotation);Debug.WriteLine(Score pmTool.Results[0].Score);}else{Debug.WriteLine(PMAlign没有找到目标);}}获取图像//获取PMAlign工具的运行画面 private void button6_Click(object sender, EventArgs e) { //判断Job是否加载 if (job null) { MessageBox.Show(请先加载Job); return; } //获取ToolGroup CogToolGroup group job.VisionTool as CogToolGroup; //获取ToolBlock CogToolBlock block group.Tools[CogToolBlock1] as CogToolBlock; //给ToolBlock输入图片 block.Inputs[OutputImage].Value _recordDisplay1.Image; //运行ToolBlock block.Run(); //显示运行结果 _recordDisplay2.Record block.CreateLastRunRecord(); //自动适应窗口 _recordDisplay2.Fit(); //获取PMAlign工具 CogPMAlignTool pmTool block.Tools[CogPMAlignTool1] as CogPMAlignTool; //显示当前运行图片 _recordDisplay2.Image pmTool.InputImage; }所有代码所有代码//导入视觉包 using Cognex.VisionPro; using Cognex.VisionPro.ImageFile; using Cognex.VisionPro.PMAlign; using Cognex.VisionPro.QuickBuild; using Cognex.VisionPro.ToolBlock; using Cognex.VisionPro.ToolGroup; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace 入门联合编程 { public partial class Form1 : Form { //公共屏幕 private CogRecordDisplay _recordDisplay1; private CogRecordDisplay _recordDisplay2; //定义一个全局ToolBlock变量 //方便后面加载一次运行多次 //private CogToolBlock job; //job对象 private CogJob job; public Form1() { InitializeComponent(); //初始化显示窗口1 CreateVpDisplay1(); //初始化显示窗口2 CreateVpDisplay2(); } private void Form1_Load(object sender, EventArgs e) { } //创建视觉显示控件1 private void CreateVpDisplay1() { //实例化对象 new _recordDisplay1 new CogRecordDisplay(); //常用属性 _recordDisplay1.Location new Point(20, 20); //控件左上角坐标 _recordDisplay1.Size new Size(360, 260); //控件宽高 _recordDisplay1.BackColor Color.Black; //控件背景颜色 //将控件加入容器二选一 this.Controls.Add(_recordDisplay1); //直接加到Form窗体 } //创建视觉显示控件2 private void CreateVpDisplay2() { //实例化对象 new _recordDisplay2 new CogRecordDisplay(); //常用属性 _recordDisplay2.Location new Point(20, 270); //控件左上角坐标 _recordDisplay2.Size new Size(360, 260); //控件宽高 _recordDisplay2.BackColor Color.Black; //控件背景颜色 //将控件加入容器二选一 this.Controls.Add(_recordDisplay2); //直接加到Form窗体 } //测试显示图片 int count 0; private void button1_Click(object sender, EventArgs e) { //CogImageFileCDB 是 Cognex.VisionPro.ImageFile 命名空间下底层 //原生类专门用来操作 .idb / .cdb 图像数据库文件。 CogImageFileCDB idb new CogImageFileCDB(); idb.Open( textBox1.Text, CogImageFileModeConstants.Read); if (count idb.Count) count 0; //读取第count张图片 例如读取第一张图片》idb[0] ICogImage img idb[count]; //显示图片 _recordDisplay1.Image img; //自动适应窗口 _recordDisplay1.Fit(); count; } private void button2_Click(object sender, EventArgs e) { //vpp文件路径 string path textBox2.Text; //从vpp文件中加载VisionPro对象 //返回类型是object所以需要转换成具体工具类型 //加载QuickBuild Job job (CogJob)CogSerializer.LoadObjectFromFile(path); //提示加载成功 MessageBox.Show(Job加载成功); } private void button3_Click(object sender, EventArgs e) { if (job null) { MessageBox.Show(请先加载Job); return; } //获取ToolGroup CogToolGroup group job.VisionTool as CogToolGroup; //获取ToolBlock CogToolBlock block group.Tools[CogToolBlock1] as CogToolBlock; //遍历ToolBlock里面的工具 foreach (ICogTool tool in block.Tools) { Debug.WriteLine( 工具名称 tool.Name 类型 tool.GetType().Name ); } } private void button4_Click(object sender, EventArgs e) { if (job null) { MessageBox.Show(请先加载Job); return; } //获取外层ToolGroup CogToolGroup group job.VisionTool as CogToolGroup; //查看ToolGroup里面的工具 foreach (ICogTool tool in group.Tools) { Debug.WriteLine( 外层工具名称 tool.Name 类型 tool.GetType().Name ); } } private void button5_Click(object sender, EventArgs e) { } //获取PMAlign工具的运行结果 private void button5_Click_1(object sender, EventArgs e) { if (job null) { MessageBox.Show(请先加载Job); return; } //获取ToolGroup CogToolGroup group job.VisionTool as CogToolGroup; //获取ToolBlock CogToolBlock block group.Tools[CogToolBlock1] as CogToolBlock; //判断是否获取成功 if (block null) { MessageBox.Show(没有找到CogToolBlock1); return; } //给ToolBlock输入图片 block.Inputs[OutputImage].Value _recordDisplay1.Image; //运行ToolBlock block.Run(); //显示运行结果 _recordDisplay2.Record block.CreateLastRunRecord(); //自动适应窗口 _recordDisplay2.Fit(); //获取PMAlign工具 CogPMAlignTool pmTool block.Tools[CogPMAlignTool1] as CogPMAlignTool; if (pmTool ! null pmTool.Results.Count 0) { //获取匹配结果 CogTransform2DLinear pose pmTool.Results[0].GetPose(); Debug.WriteLine(匹配成功); Debug.WriteLine( X坐标 pose.TranslationX ); Debug.WriteLine( Y坐标 pose.TranslationY ); Debug.WriteLine( 角度 pose.Rotation ); Debug.WriteLine( Score pmTool.Results[0].Score ); //显示当前运行图片 //_recordDisplay2.Image pmTool.InputImage; } else { Debug.WriteLine(PMAlign没有找到目标); } } //获取PMAlign工具的运行画面 private void button6_Click(object sender, EventArgs e) { //判断Job是否加载 if (job null) { MessageBox.Show(请先加载Job); return; } //获取ToolGroup CogToolGroup group job.VisionTool as CogToolGroup; //获取ToolBlock CogToolBlock block group.Tools[CogToolBlock1] as CogToolBlock; //给ToolBlock输入图片 block.Inputs[OutputImage].Value _recordDisplay1.Image; //运行ToolBlock block.Run(); //显示运行结果 _recordDisplay2.Record block.CreateLastRunRecord(); //自动适应窗口 _recordDisplay2.Fit(); //获取PMAlign工具 CogPMAlignTool pmTool block.Tools[CogPMAlignTool1] as CogPMAlignTool; //显示当前运行图片 _recordDisplay2.Image pmTool.InputImage; } } }
返回列表