public override bool doLocal() { NowResult = new LocalResult(); //1.0模板匹配 St_TemplateParam TemplateParam = NowVisionPara.Template; RectangleF roi = new RectangleF(); LocalSettingPara Setting = NowVisionPara.localSetting; roi.X = Setting.SearchAreaX; roi.Y = Setting.SearchAreaY; roi.Width = Setting.SearchWidth; roi.Height = Setting.SearchHeight; MatchingResult result; try{ NowResult.IsLocalOk = TemplateParam.FindSharpTemplate(NowImg, roi, TemplateParam, out result); NowResult.row = result.mRow; NowResult.col = result.mCol; NowResult.angle = result.mAngle; //NowResult.ShowContour = result.mContour; NowResult.ShowContour = result.getDetectionResults(); return(true); } catch { return(false); } }
private void FindLineBtn_Click(object sender, EventArgs e) { txtFindTime.Clear(); Stopwatch sw = new Stopwatch(); sw.Start(); if (GrabedImg == null) { Logger.PopError("请先采集图片!", true); return; } //1.0模板匹配 St_TemplateParam TemplateParam = VisionPara0.localPara.Template; RectangleF roi = new RectangleF(); LocalSettingPara Setting = VisionPara0.localPara.localSetting; roi.X = Setting.SearchAreaX; roi.Y = Setting.SearchAreaY; roi.Width = Setting.SearchWidth; roi.Height = Setting.SearchHeight; MatchingResult result; TemplateParam.FindSharpTemplate(GrabedImg, roi, TemplateParam, out result); //2.0调整图像位置 St_VectorAngle VectorAngle0 = new St_VectorAngle(VisionPara0.localPara.Template.CenterY, VisionPara0.localPara.Template.CenterX, VisionPara0.localPara.Template.TemplateAngle); St_VectorAngle TempFindVectorAngle = new St_VectorAngle(result.mRow, result.mCol, result.mAngle);//找到的模板坐标 HTuple HomMat = new HTuple(); HOperatorSet.VectorAngleToRigid(result.mRow, result.mCol, result.mAngle, VisionPara0.localPara.Template.CenterY, VisionPara0.localPara.Template.CenterX, VisionPara0.localPara.Template.TemplateAngle, out HomMat); HObject AffineImg = new HObject(); HOperatorSet.AffineTransImage(GrabedImg, out AffineImg, HomMat, "constant", "false"); HOperatorSet.ClearWindow(ShowWindow); MyVisionBase.hDispObj(ShowWindow, GrabedImg); //3.0找出Pin针坐标 HObject RoiContour = new HObject(); MyVisionBase.hDispObj(ShowWindow, AffineImg); HTuple PinRows = new HTuple(), PinCols = new HTuple(); PinInsepct.FindPinPos(TeachInspectPinParam, AffineImg, out PinRows, out PinCols); HObject ShowContour = new HObject(); HOperatorSet.GenCrossContourXld(out ShowContour, PinRows, PinCols, 50, 0); MyVisionBase.hSetColor(ShowWindow, "red"); MyVisionBase.hDispObj(ShowWindow, ShowContour); //4.0 计算出Pin针偏移量 HTuple OffSetRows = new HTuple(), OffSetCols = new HTuple(), OffSetDists = new HTuple();; PinInsepct.CalculatePinOffset(TeachInspectPinParam, PinRows, PinCols, out OffSetRows, out OffSetCols, out OffSetDists); HTuple Max = OffSetDists.TupleMax(); HTuple MaxIndex = OffSetDists.TupleFind(Max); HOperatorSet.GenCircleContourXld(out ShowContour, PinRows[MaxIndex[0].I], PinCols[MaxIndex[0].I], 50, 0, Math.PI * 2, "positive", 1.0); MyVisionBase.hSetColor(ShowWindow, "red"); MyVisionBase.hDispObj(ShowWindow, ShowContour); txtFindTime.Text = sw.ElapsedMilliseconds.ToString(); }