Winform之算法模块-形状模板匹配-擦除模板区域
一 初始化参数二 制作轮廓模板三 制作橡皮擦四 开始涂抹:按下鼠标左键涂画,右键结束五 涂抹结束,显示和保存涂抹区域结果
bool deleteModelFlag = false;
private void btn_DeleteModel_Click(object sender, EventArgs e) { HOperatorSet.ReduceDomain(CurrImage,ModelRegion,out HObject modelImage); HOperatorSet.CropDomain(modelImage,out modelImage); var hv_WindowHandle = hWindow_Final1.getHWindowControl().HalconWindow; HObject paint_region = new HRegion(); HObject paint_region_final = new HObject(); hWindow_Final1.DrawModel = true; hWindow_Final1.Focus(); HTuple hv_MouseState; HTuple y_Mouse=null, x_Mouse=null; HTuple y_Brush=10, x_Brush=10, r_Brush=6; HTuple homMat2D; HObject brush_region_affine = new HObject(); HObject modelXLD = null; HObject modelXLDAffineTrans = null; HOperatorSet.CreateShapeModel(modelImage, 0, -3.14, 6.28, \"auto\", \"auto\", \"use_polarity\", 30, \"auto\", out HTuple ModelId); HOperatorSet.GetShapeModelContours(out modelXLD, ModelId,1); HOperatorSet.GetImageSize(modelImage,out HTuple width,out HTuple height); HOperatorSet.VectorAngleToRigid(0,0,0, height/2, width/2, 0,out HTuple homMat2D1); HOperatorSet.AffineTransContourXld(modelXLD,out modelXLDAffineTrans,homMat2D1); try { HOperatorSet.GenCircle(out HObject brush_region,y_Brush,x_Brush,r_Brush); hWindow_Final1.HobjectToHimage(modelImage); HOperatorSet.SetColor(hv_WindowHandle,\"blue\"); hv_MouseState = 0; deleteModelFlag =false; while (hv_MouseState != 4 && deleteModelFlag == false) { System.Windows.Forms.Application.DoEvents(); y_Mouse = -1; x_Mouse = -1; try { HOperatorSet.GetMposition(hv_WindowHandle, out y_Mouse, out x_Mouse, out hv_MouseState); } catch (Exception exp) { hv_MouseState = 0; } HOperatorSet.SetSystem(\"flush_graphic\", \"false\"); HOperatorSet.DispObj(modelImage, hv_WindowHandle); HOperatorSet.DispObj(modelXLDAffineTrans, hv_WindowHandle); if (paint_region.IsInitialized()) { HOperatorSet.DispObj(paint_region, hv_WindowHandle); } if (y_Mouse >= 0 && x_Mouse >= 0) { HOperatorSet.VectorAngleToRigid(y_Brush, x_Brush, 0, y_Mouse, x_Mouse, 0, out homMat2D); HOperatorSet.AffineTransRegion(brush_region, out brush_region_affine, homMat2D, \"nearest_neighbor\"); HOperatorSet.DispObj(brush_region_affine, hv_WindowHandle); HOperatorSet.SetSystem(\"flush_graphic\", \"true\"); ViewROI.HalconTool.set_display_font(hv_WindowHandle, 20, \"mono\", \"true\", \"false\"); ViewROI.HalconTool.disp_message(hv_WindowHandle, \"按下鼠标右键结束涂抹\", \"window\", 20, 20, \"red\", \"false\"); if (hv_MouseState == 1) { if (paint_region.IsInitialized()) { HOperatorSet.Union2(paint_region, brush_region_affine, out HObject unionRegion); paint_region = unionRegion; } else { paint_region = new HObject(brush_region_affine); } } } } } catch (Exception exp) { MessageBox.Show(exp.Message); } finally { hWindow_Final1.HobjectToHimage(modelImage); hWindow_Final1.DispObj(paint_region,\"red\"); hWindow_Final1.DrawModel=false; HOperatorSet.GetDomain(modelImage,out HObject imageRegion); HOperatorSet.Difference(imageRegion, paint_region,out paint_region_final); HOperatorSet.WriteRegion(paint_region_final, @\"D:\\\\paint_region_final.reg\"); } }

