VisionPro是Cognex的机器视觉算法软件,通常的做法是使用VS做二次开发。
这里主要分享VisionPro中通过ToolBlock实现一个视觉检测,以及通过调用单个Tool实现一个视觉检测。
最终实现一个硬币数量检测以及坐标位置输出的应用:
使用ToolBlock的方式:
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);
private CogImageFileTool cogImageFileTool2;
cogImageFileTool2.Operator.Open(@"F:\VPRO_Install\VisionPro\Images\coins.idb", CogImageFileModeConstants.Read);
//运行一次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();
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;
//一般来说这里要做界面图片显示部分,这里不再赘述
}
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;
//获取图像
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();
//这里显示在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】