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);
标签:调用,cogToolBlock2,VisionPro,ToolBlock,private,item,工具 From: https://www.cnblogs.com/ybqjymy/p/17656693.html