visionpro常用脚本(C调用VisionproCogBlobTool工具)
visionpro常用脚本(C调用VisionproCogBlobTool工具)图5. CogBlobTool结果页运行后,查看结果,N是Blob的索引号,在Results.GetBlobs()中使用,ID是Blob的唯一识别码,后面的面积是【侧得尺寸】中选择测量的尺寸:图2. 设置Segmentation、Connectivity 和 Morphology 参数图3. 设置Region参数图4. 设置【测得尺寸】
VisionPro CogBlobTool的作用是检测和定位图像中某一灰度范围内的形状位置特征,可以分析特征是否存在、特征数量、特征位置、特征形状轮廓/长宽
VisionPro中CogBlobTool的使用Visionpro中使用CogBlobTool关键以下几个步骤:
- 通过拖曳或右键”InputImage”-->”连接自”传入测试图像
图1. 向CogBlobTool传入要测试的图像
注:CogBlobTool只接受灰度图像输入,不接受彩色图像
- 设置Segmentation、Connectivity 和 Morphology 参数
图2. 设置Segmentation、Connectivity 和 Morphology 参数
- 设置斑点分析的区域,默认对整幅图像进行斑点分析
图3. 设置Region参数
- 设置要测得的尺寸,这里将变更Results.GetBlobs()的输出
图4. 设置【测得尺寸】
运行后,查看结果,N是Blob的索引号,在Results.GetBlobs()中使用,ID是Blob的唯一识别码,后面的面积是【侧得尺寸】中选择测量的尺寸:
图5. CogBlobTool结果页
C#调用CogBlobTool- 添加Cognex.Visionpro、Cognex.Visionpro.Blob、Cognex.VisionPro.Core引用
图6. 添加Visionpro的相关引用
using Cognex.VisionPro;
using Cognex.VisionPro.Blob;
namespace MyVppTest
{
public class BlobAnalysis
{
public CogBlobResultCollection GetBlobAnalysisResults(CogImage8Grey image8Grey CogImage8Grey MaskImg = null)
{
//实例化CogBlobTool对象
CogBlobTool blobTool = new CogBlobTool();
//输入灰度图像(必须输入项)
blobTool.InputImage = image8Grey;
//设置矩形区域为Blob分析的区域(默认是整张图像),根据实际应用变更
CogRectangle rectangle = new CogRectangle();
rectangle.SetXYWidthHeight(0 0 image8Grey.Width image8Grey.Height);
blobTool.Region = rectangle; //可以传入任何实现Cognex.ICogRegion的形状
//设置区域模式(一般使用默认的,不写)
blobTool.RunParams.RegionMode = CogRegionModeConstants.PixelAlignedBoundingBoxAdjustMask;
//设置分段参数(以下设置为获取亮度不高于128的黑斑),必须根据实际应用变更
blobTool.RunParams.SegmentationParams.Mode = CogBlobSegmentationModeConstants.HardFixedThreshold; //使用固定的硬阈值模式
blobTool.RunParams.SegmentationParams.Polarity = CogBlobSegmentationPolarityConstants.DarkBlobs; //获取白底黑斑
blobTool.RunParams.SegmentationParams.HardFixedThreshold = 128;
//设置连通性(以下除ConnectivityMinPixels外实际为默认设置,不需要用代码写)
blobTool.RunParams.ConnectivityMode = CogBlobConnectivityModeConstants.GreyScale; //按照灰度模式将对象像素连接成斑点
blobTool.RunParams.ConnectivityCleanup = CogBlobConnectivityCleanupConstants.Fill; //将对象像素外的像素及连接后面积不足最小值的部分对象像素填充
blobTool.RunParams.ConnectivityMinPixels = 20; //设置斑点的最小像素面积为20,根据实际填写
//设置【形态调整操作】,一般为空,不写,另外使用图像处理
blobTool.RunParams.MorphologyOperations.Add(CogBlobMorphologyConstants.CloseHorizontal);
//设置运行时要测得的尺寸
blobTool.RunParams.RunTimeMeasures.Clear();// 清除默认的运行时测量
CogBlobMeasure blobMeasure0 = new CogBlobMeasure
{
Measure = CogBlobMeasureConstants.Area
Mode = CogBlobMeasureModeConstants.Filter
FilterMode = CogBlobFilterModeConstants.ExcludeBlobsInRange
FilterRangeLow = 400
FilterRangeHigh = 500
}; //实例化一个包含面积400~500像素的运行时测量
blobTool.RunParams.RunTimeMeasures.Add(blobMeasure0);
//设置为面积降序,注意前面RunTimeMeasures中必须已添加进行排序的测量
blobTool.RunParams.SortEnabled = true;
blobTool.RunParams.SortAscending = false;
blobTool.RunParams.SortMeasure = CogBlobMeasureConstants.Area;
//以下实际属性是默认的设置,不需要写
blobTool.RunParams.ComputeBlobRLE = true; //是否需要额外计算周长等
blobTool.RunParams.ComputeInertia = true; //是否计算惯性
blobTool.RunParams.ComputeTopology = true; //是否计算拓扑(父子关系)
//设置遮蔽图像(常用)
blobTool.RunParams.InputImageMask = MaskImg;
//运行CogBlobTool工具
blobTool.Run();
//保存结果
CogBlobResultCollection Results = (CogBlobResultCollection)blobTool.Results.GetBlobs().Clone();
//释放CogBlobTool对象
rectangle = null;
blobTool.Dispose();
return Results;
}
}
}