VisionPro 9.5中的工具调用和工具组(ToolBlock)调用

VisionPro是Cognex的机器视觉算法软件,通常的做法是使用VS做二次开发。
这里主要分享VisionPro中通过ToolBlock实现一个视觉检测,以及通过调用单个Tool实现一个视觉检测。

最终实现一个硬币数量检测以及坐标位置输出的应用:
VisionPro 9.5中的工具调用和工具组(ToolBlock)调用_第1张图片
使用ToolBlock的方式:

  1. 声明CogToolBlock类型的实例,并且序列化一个Vpp文件,编写vpp的过程这里不做赘述。
private CogToolBlock cogToolBlock2;
cogToolBlock2 = CogSerializer.LoadObjectFromFile(@"D:\C#Project\VisionPro_Control\VisionPro_Control\bin\x64\Debug\SampleVpp.vpp") as CogToolBlock;
//订阅ToolBlock的Ran事件,当ToolBlock执行完毕后程序会执行这个回调函数。
cogToolBlock2.Ran += new EventHandler(OnToolBlockRan);
  1. 由于这里使用的图片回放的方式,并非工业相机,所以需要申明一个CogImageFileTool类型,以获取图像或者图像集(idb、cdb)文件。(如果是接入工业相机,则需要声明CogAcqFifoTool采像工具,或者实现ICogFrameGrabber接口的方式从相机中取像。)
private CogImageFileTool cogImageFileTool2;
cogImageFileTool2.Operator.Open(@"F:\VPRO_Install\VisionPro\Images\coins.idb", CogImageFileModeConstants.Read);
  1. 为ToolBlock传入图像,并运行ToolBlock
//运行一次imageFileTool,则可以通过OutputImage属性获取到一张ICogImage类型的图片
cogImageFileTool2.Run();  
//将获取的图片赋值给ToolBlock的Image引脚,这里的Inputs是一个只读索引器
//可以通过["Image"]赋值,前提是"Image"没有被重命名。也可以通过[0]的方式赋值。
cogToolBlock2.Inputs["Image"].Value = cogImageFileTool2.OutputImage as CogImage8Grey;
//除了传图片给ToolBlock之外,还可以传参数进去,比如传入Pattern的查找概数限制。
cogToolBlock2.Inputs["SetCount"].Value = (int)nud_SetCount.Value;
//图片有了,参数有了,运行ToolBlock
cogToolBlock2.Run();
  1. 获取运行结果:

 private void OnToolBlockRan(object sender, EventArgs e)
 {
     
      //声明一个List集合获取ToolBlock的各种类型的运行结果
      List<DataObj> dataList = new List<DataObj>();
      //获取ToolBlock的结果输出引脚集合
      CogPMAlignResults resultList = (CogPMAlignResults)cogToolBlock2.Outputs["ResultList"].Value;
      //遍历,并添加到List集合中
      foreach (CogPMAlignResult item in resultList)
      {
     
           dataList.Add(new DataObj(item.ID, item.GetPose().TranslationX, item.GetPose().TranslationY, item.GetPose().Rotation, item.GetPose().Scaling, item.Score));
      }
      //将获取到的集合赋值给DataGridView控件作为显示的图像源
      dgv_DataList.DataSource = dataList;

      //一般来说这里要做界面图片显示部分,这里不再赘述
 }

使用单工具调用的方式:
VisionPro 9.5中的工具调用和工具组(ToolBlock)调用_第2张图片

  1. 声明工具实例:工具vpp文件的编写这里不做赘述
 private CogImageFileTool cogImageFileTool; //图像文件
 private CogPMAlignTool cogPMAlignTool;	    //PMAlign图像识别工具
 private CogFixtureTool cogFixtureTool;     //位置修正工具
 private CogBlobTool cogBlobTool;           //斑点工具

 cogImageFileTool = new CogImageFileTool();
 cogPMAlignTool = new CogPMAlignTool();
 cogImageFileTool.Operator.Open(@"F:\VPRO_Install\VisionPro\Images\bracket_std.idb",  CogImageFileModeConstants.Read);
 cogPMAlignTool = CogSerializer.LoadObjectFromFile(toolVpp + "pmalign_tool.vpp") as CogPMAlignTool;
  1. 按顺序运行工具:
//获取图像
cogImageFileTool.Run();
//将图像赋值给PMAlign工具,并运行
cogPMAlignTool.InputImage = cogImageFileTool.OutputImage as CogImage8Grey;
cogPMAlignTool.Run();
//将图像赋值给定位修正工具,并获取PMAlign工具的线性转换矩阵
cogFixtureTool.InputImage = cogImageFileTool.OutputImage as CogImage8Grey;
cogFixtureTool.RunParams.UnfixturedFromFixturedTransform = cogPMAlignTool.Results[0].GetPose();
cogFixtureTool.Run();
//将位置修正后的图像赋值给Blob工具,并运行
cogBlobTool.InputImage = cogFixtureTool.OutputImage as CogImage8Grey;
cogBlobTool.Run();
  1. 获取Blob工具的结果:
 //这里显示在CogDisplay控件上,当然也可以显示在CogRecordDisplay控件上
 cogDisplay1.StaticGraphics.Clear();
 cogDisplay1.Image = image;
 //遍历Blob的结果集合,然后添加到CogDisplay绘制,这里显示斑点中心|边框
 foreach (CogBlobResult item in cogBlobTool.Results.GetBlobs())
  {
                
   //CogBlobResult包含了这个斑点的所有信息,包括CenterOfMassX,CenterOfMassY,Area等等。。
   cogDisplay1.StaticGraphics.Add(item.CreateResultGraphics(CogBlobResultGraphicConstants.Boundary | CogBlobResultGraphicConstants.CenterOfMass), "");
  }
 cogDisplay1.Fit(true);

【END】

你可能感兴趣的:(Vision_Pro)