流程图连接图效果图
细节部分
图像处理
量化处理:其像素值进行离散化处理,即量化。去掉原本图中间黑的那部分
同时,要防止断裂,修改量化级别数
灰阶形态open操作:去掉毛刺,并且使图片更完整,
膨胀操作:放断裂
卡尺
卡到每两个插件
代码
//1.图形集合
CogGraphicCollection gc = new CogGraphicCollection();
//2.
CogBlobTool blob = mToolBlock.Tools["CogBlobTool1"] as CogBlobTool;
bool flag = true;
gc.Clear();
foreach( CogBlobResult b in blob.Results.GetBlobs() ) {
CogRectangleAffine rect = new CogRectangleAffine();
rect = b.GetBoundingBox(CogBlobAxisConstants.Principal); //最小外接矩形
//针脚弯曲的判断----------------------------------
double angle = Math.Abs(CogMisc.RadToDeg(b.Angle));
if( Math.Abs(angle - 90) > 5 )
{
gc.Add(rect); //添加到图形集合
flag = false;
}
//针脚偏移-------------------------------------------
double h = b.GetMeasure(CogBlobMeasureConstants.BoundingBoxExtremaAngleHeight); // ImageBoundHeight
if( b.CenterOfMassY < 250 ) {
if( h < 100 || h > 120 )
{ rect.Color = CogColorConstants.Red;
gc.Add(rect); //添加到图形集合
flag = false;
} }
else{
if( h < 50 || h > 65 )
{
rect.Color = CogColorConstants.Magenta;
gc.Add(rect); //添加到图形集合
flag = false;
} }
//-----------------------------------------------
}
//-------------------------------------
CogCaliperTool c1 = mToolBlock.Tools["CogCaliperTool1"] as CogCaliperTool;
List<CogCaliperResult> cList1 = new List<CogCaliperResult>();
for(int i = 0 ;i < c1.Results.Count ;i++)
{
cList1.Add(c1.Results[i]);
}
cList1.Sort(( m,n) => { return m.PositionX.CompareTo(n.PositionX); });//按照x坐标从小到大排序
if(cList1[0].PositionX > 50) { //检测左右两端是否有异常,以左边为例
CogRectangleAffine rect = new CogRectangleAffine();
rect.CenterX = cList1[0].PositionX / 2;
rect.CenterY = cList1[0].PositionY;
rect.SideXLength = cList1[0].PositionX - 10;
rect.SideYLength = 200;
rect.Color = CogColorConstants.Red;
gc.Add(rect);
flag = false;
}
//-----------中间的缺失针脚判断--------------------------
for(int i = 0 ;i < cList1.Count - 1 ;i++)//计算间距
{
double dis = cList1[i + 1].PositionX - cList1[i].PositionX;
if(dis > 80)
{
CogRectangleAffine rect = new CogRectangleAffine();
rect.CenterX = (cList1[i + 1].PositionX + cList1[i].PositionX ) / 2;
rect.CenterY = cList1[i].PositionY;
rect.SideXLength = dis - 20;
rect.SideYLength = 200;
rect.Color = CogColorConstants.Red;
gc.Add(rect);
flag = false;
}
}
//---------------------------------------
CogGraphicLabel res = new CogGraphicLabel();
res.Font = new Font("楷体", 20);
if(flag)//正常
{
res.SetXYText(100, 100, "OK");
res.Color = CogColorConstants.Green;
}
else //有缺陷
{
res.SetXYText(100, 100, "NG");
res.Color = CogColorConstants.Red;
}
gc.Add(res);
//------------------------------------------
mToolBlock.AddGraphicToRunRecord(c, lastRecord, "CogIPOneImageTool1.InputImage", "");