
案例1齿轮个数检测#region namespace importsusing System;using System.Collections;using System.Drawing;using System.IO;using System.Windows.Forms;using Cognex.VisionPro;using Cognex.VisionPro.ToolBlock;using Cognex.VisionPro3D;using Cognex.VisionPro.ImageProcessing;using Cognex.VisionPro.Blob;using Cognex.VisionPro.Dimensioning;#endregionpublic class CogToolBlockAdvancedScript : CogToolBlockAdvancedScriptBase{#region Private Member Variablesprivate Cognex.VisionPro.ToolBlock.CogToolBlock mToolBlock;#endregion//声明图像集合工具CogGraphicCollection col new CogGraphicCollection();public override bool GroupRun(ref string message, ref CogToolResultConstants result){//注释掉系统自动执行工具foreach逻辑// foreach(ICogTool tool in mToolBlock.Tools)// mToolBlock.RunTool(tool, ref message, ref result);//映射CogIPOneImageToolCogIPOneImageTool ipOne mToolBlock.Tools[CogIPOneImageTool1] as CogIPOneImageTool;//映射CogSobelEdgeToolCogSobelEdgeTool sobel mToolBlock.Tools[CogSobelEdgeTool1] as CogSobelEdgeTool;//映射CogBlobToolCogBlobTool blob1 mToolBlock.Tools[CogBlobTool1] as CogBlobTool;//映射CogDistancePointPointToolCogDistancePointPointTool dis mToolBlock.Tools[CogDistancePointPointTool1] as CogDistancePointPointTool;//映射CogCopyRegionToolCogCopyRegionTool copyTool mToolBlock.Tools[CogCopyRegionTool1] as CogCopyRegionTool;//映射 CogBlobToolCogBlobTool blob2 mToolBlock.Tools[CogBlobTool2] as CogBlobTool;//清空图形集合col.Clear();//1.运行CogIPOneImageToolipOne.Run();//2.运行sobel工具sobel.Run();//3.运行blob1工具 得到每一个齿轮的轮廓blob1.Run();//4.遍历blob结果for (int i 0; i blob1.Results.GetBlobs().Count; i){//得到每一个blob的中心点坐标double startX blob1.Results.GetBlobs()[i].CenterOfMassX;double startY blob1.Results.GetBlobs()[i].CenterOfMassY;//声明一个多边形用来接收blob检测出的轮廓CogPolygon p new CogPolygon();p blob1.Results.GetBlobs()[i].GetBoundary();//声明集合存储Distance工具的结果数据ArrayList list new ArrayList();list.Clear();//遍历polygon的所有顶点 测量圆心到顶点的距离 并添加到集合//通过计算点到点的距离求所有距离的平均值 来得出cogpyregion 复制区域的一个半径for (int j 0; j p.NumVertices; j){//获取顶点坐标double endX p.GetVertexX(j);double endY p.GetVertexY(j);//把齿轮圆心坐标dis.StartX startX;dis.StartY startY;//polygon的所有顶点坐标dis.EndX endX;dis.EndY endY;//运行距离测量工具dis.Run();//添加结果到集合list.Add(dis.Distance);}//求距离平均值该值设置为copyregiontool的region半径double mean 0,total 0;for (int k 0; k list.Count; k){total total (double) list[k];}mean total / list.Count;//创建圆形Region并设置属性CogCircle c new CogCircle();c.CenterX startX;c.CenterY startY;c.Radius mean;//为CopyRegionTool的Region属性赋值copyTool.Region c;//运行CopyRegion工具得到一张掩膜后的新图像copyTool.Run();//图像传递给blob2工具同时blob2的检测区域可以使用blob11检测的边界区域blob2.Region p;//运行blob2工具 获取结果blob2.Run();//设置labelCogGraphicLabel label new CogGraphicLabel();label.Color CogColorConstants.Green;label.SetXYText(startX,startY,齿数 blob2.Results.GetBlobs().Count);col.Add(label);}return false;}public override void ModifyLastRunRecord(Cognex.VisionPro.ICogRecord lastRecord){for (int i 0; i col.Count; i){mToolBlock.AddGraphicToRunRecord(col[i], lastRecord, CogIPOneImageTool1.InputImage, Script);}}案例2 点码检测1.模板匹配工具1 为了给 FixTure 提供定位坐标2.选择框的位置 是整幅图中 图案内容基本没有变化的区域 容易定位3.中心原点坐标 并没有放在物体中心位置 后续定位坐标 要以此做为原点坐标#region namespace importsusing System;using System.Collections;using System.Drawing;using System.IO;using System.Windows.Forms;using Cognex.VisionPro;using Cognex.VisionPro.ToolBlock;using Cognex.VisionPro3D;using Cognex.VisionPro.PMAlign;using Cognex.VisionPro.CalibFix;#endregionpublic class CogToolBlockAdvancedScript : CogToolBlockAdvancedScriptBase{#region Private Member Variablesprivate Cognex.VisionPro.ToolBlock.CogToolBlock mToolBlock;#endregion//声明类型CogGraphicLabel的不可变数组private CogGraphicLabel[] mLabel;//声明 CogPMAlignToolprivate CogPMAlignTool mpma2;public override bool GroupRun(ref string message, ref CogToolResultConstants result){//初始化CogGraphicLabel的不可变数组mLabel new CogGraphicLabel[16];// To let the execution stop in this script when a debugger is attached, uncomment the following lines.#if DEBUGif (System.Diagnostics.Debugger.IsAttached) System.Diagnostics.Debugger.Break();#endif// Run each tool using the RunTool functionforeach(ICogTool tool in mToolBlock.Tools)mToolBlock.RunTool(tool, ref message, ref result);//映射mpampma2 mToolBlock.Tools[CogPMAlignTool2]as CogPMAlignTool;//根据mpa2结果循环for (int i 0; i mpma2.Results.Count; i){//初始化label 放入数组中mLabel[i] new CogGraphicLabel();mLabel[i].Color CogColorConstants.Red;mLabel[i].Font new Font(宋体, 16);//获取每个匹配结果的 坐标double x mpma2.Results[i].GetPose().TranslationX;double y mpma2.Results[i].GetPose().TranslationY;//根据坐标来匹配当前点码位置 创建对应labelif (y-600){if(x600){mLabel[i].SetXYText(x, y, 1);}else if(x 450 x 600){mLabel[i].SetXYText(x, y, 2);}else if(x 450 x 300){mLabel[i].SetXYText(x, y, 3);}else{mLabel[i].SetXYText(x, y, 4);}}//if (y-y0-350)else if (y-450y-600){if(x 600){mLabel[i].SetXYText(x, y, 5);}else if(x 450 x 600){mLabel[i].SetXYText(x, y, 6);}else if(x 450 x 300){mLabel[i].SetXYText(x, y, 7);}else{mLabel[i].SetXYText(x, y, 8);}}//y-y0-350y-y0-500else if(y-300y-450){if(x 600){mLabel[i].SetXYText(x, y, 9);}else if(x 450 x 600){mLabel[i].SetXYText(x, y, 10);}else if(x 450 x 300){mLabel[i].SetXYText(x, y, 11);}else{mLabel[i].SetXYText(x, y, 12);}}//y-y0-500y-y0-650else{if(x 600){mLabel[i].SetXYText(x, y, 13);}else if(x 450 x 600){mLabel[i].SetXYText(x, y, 14);}else if(x 450 x 300){mLabel[i].SetXYText(x, y, 15);}else{mLabel[i].SetXYText(x, y, 16);}}//else y-y0-650}return false;}public override void ModifyLastRunRecord(Cognex.VisionPro.ICogRecord lastRecord){for (int i 0; i mpma2.Results.Count; i){mToolBlock.AddGraphicToRunRecord(mLabel[i], lastRecord, CogFixtureTool1.OutputImage, script);}}案例3:划痕检测 并描边3.划痕内部出现许多黑色斑点 后续使用cogIPoneImage调整1.cogIPoneImage工具2.添加灰度形态调整3.设置关闭 使划痕中的黑色区域变小 让划痕内部连通1.Blob检测出划痕#region namespace importsusing System;using System.Collections;using System.Drawing;using System.IO;using System.Windows.Forms;using Cognex.VisionPro;using Cognex.VisionPro.ToolBlock;using Cognex.VisionPro3D;using Cognex.VisionPro.ImageProcessing;using Cognex.VisionPro.Blob;using Cognex.VisionPro.Dimensioning;#endregionpublic class CogToolBlockAdvancedScript : CogToolBlockAdvancedScriptBase{#region Private Member Variablesprivate Cognex.VisionPro.ToolBlock.CogToolBlock mToolBlock;#endregionCogGraphicCollection col;public override bool GroupRun(ref string message, ref CogToolResultConstants result){col new CogGraphicCollection();// To let the execution stop in this script when a debugger is attached, uncomment the following lines.// #if DEBUG// if (System.Diagnostics.Debugger.IsAttached) System.Diagnostics.Debugger.Break();// #endifCogBlobTool mBlob mToolBlock.Tools[CogBlobTool1]as CogBlobTool;// Run each tool using the RunTool functionforeach(ICogTool tool in mToolBlock.Tools)mToolBlock.RunTool(tool, ref message, ref result);//描边for (int i 0; i mBlob.Results.GetBlobs().Count; i){CogPolygon p new CogPolygon();p mBlob.Results.GetBlobs()[i].GetBoundary();p.Color CogColorConstants.Red;col.Add(p);}return false;}public override void ModifyLastRunRecord(Cognex.VisionPro.ICogRecord lastRecord){foreach (ICogGraphic g in col){mToolBlock.AddGraphicToRunRecord( g, lastRecord, CogSobelEdgeTool1.InputImage, script);}}案例4磁极崩边检测1.灰度图转换工具1.模板匹配1.FixTure定位工具1.CogIPoneImage工具 图像预处理2.添加中值Nxm 设定内核高度和宽度 9x91.添加灰阶形态Nxm 设置内核高度宽度 7X71.CogAffineTransformTool工具 图像处理工具 作用消除仿射矩形的旋转和倾斜的影响2.选择FixTure空间坐标