一杯清酒邀明月
天下本无事,庸人扰之而烦耳。
posts - 3121,comments - 209,views - 578万
VisionPro是Cognex的机器视觉算法软件,通常的做法是使用VS做二次开发。
这里主要分享VisionPro中通过ToolBlock实现一个视觉检测,以及通过调用单个Tool实现一个视觉检测。
最终实现一个硬币数量检测以及坐标位置输出的应用:

使用ToolBlock的方式:

声明CogToolBlock类型的实例,并且序列化一个Vpp文件,编写vpp的过程这里不做赘述。

1 private CogToolBlock cogToolBlock2;
2 cogToolBlock2 = CogSerializer.LoadObjectFromFile(@"D:\C#Project\VisionPro_Control\VisionPro_Control\bin\x64\Debug\SampleVpp.vpp") as CogToolBlock;
3 //订阅ToolBlock的Ran事件,当ToolBlock执行完毕后程序会执行这个回调函数。
4 cogToolBlock2.Ran += new EventHandler(OnToolBlockRan);

由于这里使用的图片回放的方式,并非工业相机,所以需要申明一个CogImageFileTool类型,以获取图像或者图像集(idb、cdb)文件。(如果是接入工业相机,则需要声明CogAcqFifoTool采像工具,或者实现ICogFrameGrabber接口的方式从相机中取像。)

1 private CogImageFileTool cogImageFileTool2;
2 cogImageFileTool2.Operator.Open(@"F:\VPRO_Install\VisionPro\Images\coins.idb", CogImageFileModeConstants.Read);

为ToolBlock传入图像,并运行ToolBlock

复制代码
1 //运行一次imageFileTool,则可以通过OutputImage属性获取到一张ICogImage类型的图片
2 cogImageFileTool2.Run();  
3 //将获取的图片赋值给ToolBlock的Image引脚,这里的Inputs是一个只读索引器
4 //可以通过["Image"]赋值,前提是"Image"没有被重命名。也可以通过[0]的方式赋值。
5 cogToolBlock2.Inputs["Image"].Value = cogImageFileTool2.OutputImage as CogImage8Grey;
6 //除了传图片给ToolBlock之外,还可以传参数进去,比如传入Pattern的查找概数限制。
7 cogToolBlock2.Inputs["SetCount"].Value = (int)nud_SetCount.Value;
8 //图片有了,参数有了,运行ToolBlock
9 cogToolBlock2.Run();
复制代码

获取运行结果:

复制代码
 1  private void OnToolBlockRan(object sender, EventArgs e)
 2  {
 3       //声明一个List集合获取ToolBlock的各种类型的运行结果
 4       List<DataObj> dataList = new List<DataObj>();
 5       //获取ToolBlock的结果输出引脚集合
 6       CogPMAlignResults resultList = (CogPMAlignResults)cogToolBlock2.Outputs["ResultList"].Value;
 7       //遍历,并添加到List集合中
 8       foreach (CogPMAlignResult item in resultList)
 9       {
10            dataList.Add(new DataObj(item.ID, item.GetPose().TranslationX, item.GetPose().TranslationY, item.GetPose().Rotation, item.GetPose().Scaling, item.Score));
11       }
12       //将获取到的集合赋值给DataGridView控件作为显示的图像源
13       dgv_DataList.DataSource = dataList;
14 
15       //一般来说这里要做界面图片显示部分,这里不再赘述
16  }
复制代码

使用单工具调用的方式:

声明工具实例:工具vpp文件的编写这里不做赘述

复制代码
1  private CogImageFileTool cogImageFileTool; //图像文件
2  private CogPMAlignTool cogPMAlignTool;        //PMAlign图像识别工具
3  private CogFixtureTool cogFixtureTool;     //位置修正工具
4  private CogBlobTool cogBlobTool;           //斑点工具
5 
6  cogImageFileTool = new CogImageFileTool();
7  cogPMAlignTool = new CogPMAlignTool();
8  cogImageFileTool.Operator.Open(@"F:\VPRO_Install\VisionPro\Images\bracket_std.idb",  CogImageFileModeConstants.Read);
9  cogPMAlignTool = CogSerializer.LoadObjectFromFile(toolVpp + "pmalign_tool.vpp") as CogPMAlignTool;
复制代码

按顺序运行工具:

复制代码
 1 //获取图像
 2 cogImageFileTool.Run();
 3 //将图像赋值给PMAlign工具,并运行
 4 cogPMAlignTool.InputImage = cogImageFileTool.OutputImage as CogImage8Grey;
 5 cogPMAlignTool.Run();
 6 //将图像赋值给定位修正工具,并获取PMAlign工具的线性转换矩阵
 7 cogFixtureTool.InputImage = cogImageFileTool.OutputImage as CogImage8Grey;
 8 cogFixtureTool.RunParams.UnfixturedFromFixturedTransform = cogPMAlignTool.Results[0].GetPose();
 9 cogFixtureTool.Run();
10 //将位置修正后的图像赋值给Blob工具,并运行
11 cogBlobTool.InputImage = cogFixtureTool.OutputImage as CogImage8Grey;
12 cogBlobTool.Run();
复制代码

获取Blob工具的结果:

复制代码
 1  //这里显示在CogDisplay控件上,当然也可以显示在CogRecordDisplay控件上
 2  cogDisplay1.StaticGraphics.Clear();
 3  cogDisplay1.Image = image;
 4  //遍历Blob的结果集合,然后添加到CogDisplay绘制,这里显示斑点中心|边框
 5  foreach (CogBlobResult item in cogBlobTool.Results.GetBlobs())
 6   {           
 7    //CogBlobResult包含了这个斑点的所有信息,包括CenterOfMassX,CenterOfMassY,Area等等。。
 8    cogDisplay1.StaticGraphics.Add(item.CreateResultGraphics(CogBlobResultGraphicConstants.Boundary | CogBlobResultGraphicConstants.CenterOfMass), "");
 9   }
10  cogDisplay1.Fit(true);
复制代码

 

posted on   一杯清酒邀明月  阅读(2378)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
历史上的今天:
2022-08-25 Qt 'QApplication'file not found 解决办法
2021-08-25 OpenCV .直方图均衡 CLAHE算法学习
2021-08-25 OpenCV 直方图均衡化原理
2021-08-25 OpenCV 直方图绘制以及直方图均衡化
2021-08-25 OpenCV 图像锐化处理、提高图像对比度
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示