using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; using HalconDotNet; namespace HalconTools { public partial class frmContourAssistant : Form { public frmContourAssistant() { InitializeComponent(); } public HImage MainImage1; public HImage MainImage2; public HImage MainImage3; public HImage MainImage4; public ContourAssistant mContourAssistant1; public ContourAssistant mContourAssistant2; public ContourAssistant mContourAssistant3; public ContourAssistant mContourAssistant4; public HObject ThresholdObj; public HObject ConnectRegion; public HObject ObjsSelect; public HObject SelectedObj; //参数 public ContourParam para = new ContourParam(); public void init() { mContourAssistant1 = new ContourAssistant(viewport1); mContourAssistant2 = new ContourAssistant(viewport2); mContourAssistant3 = new ContourAssistant(viewport3); mContourAssistant4 = new ContourAssistant(viewport4); cmbSelectObj.SelectedIndex = 0; } private void RBnone_CheckedChanged(object sender, EventArgs e) { mContourAssistant1.viewController.setViewState(HWndCtrl.MODE_VIEW_NONE); mContourAssistant2.viewController.setViewState(HWndCtrl.MODE_VIEW_NONE); mContourAssistant3.viewController.setViewState(HWndCtrl.MODE_VIEW_NONE); mContourAssistant4.viewController.setViewState(HWndCtrl.MODE_VIEW_NONE); } private void RBmove_CheckedChanged(object sender, EventArgs e) { mContourAssistant1.viewController.setViewState(HWndCtrl.MODE_VIEW_MOVE); mContourAssistant2.viewController.setViewState(HWndCtrl.MODE_VIEW_MOVE); mContourAssistant3.viewController.setViewState(HWndCtrl.MODE_VIEW_MOVE); mContourAssistant4.viewController.setViewState(HWndCtrl.MODE_VIEW_MOVE); } private void RBZoom_CheckedChanged(object sender, EventArgs e) { mContourAssistant1.viewController.setViewState(HWndCtrl.MODE_VIEW_ZOOM); mContourAssistant2.viewController.setViewState(HWndCtrl.MODE_VIEW_ZOOM); mContourAssistant3.viewController.setViewState(HWndCtrl.MODE_VIEW_ZOOM); mContourAssistant4.viewController.setViewState(HWndCtrl.MODE_VIEW_ZOOM); } private void btnFitZoom_Click(object sender, EventArgs e) { mContourAssistant1.viewController.resetWindow(); mContourAssistant1.viewController.repaint(); mContourAssistant2.viewController.resetWindow(); mContourAssistant2.viewController.repaint(); mContourAssistant3.viewController.resetWindow(); mContourAssistant3.viewController.repaint(); mContourAssistant4.viewController.resetWindow(); mContourAssistant4.viewController.repaint(); } private void btnResetAll_Click(object sender, EventArgs e) { mContourAssistant1.viewController.resetAll(); mContourAssistant1.viewController.repaint(); mContourAssistant2.viewController.resetAll(); mContourAssistant2.viewController.repaint(); mContourAssistant3.viewController.resetAll(); mContourAssistant3.viewController.repaint(); mContourAssistant4.viewController.resetAll(); mContourAssistant4.viewController.repaint(); } private void frmContourAssistant_Load(object sender, EventArgs e) { init(); } private void btnLoadImage_Click(object sender, EventArgs e) { OpenFileDialog imagePath = new OpenFileDialog(); imagePath.Filter = "*.jpg,*.jpeg,*.bmp,*.gif,*.ico,*.png,*.tif,*.wmf|*.jpg;*.jpeg;*.bmp;*.gif;*.ico;*.png;*.tif;*.wmf"; if (imagePath.ShowDialog() == DialogResult.OK) { if (!mContourAssistant1.SetImage(imagePath.FileName)) { return; } MainImage1 = mContourAssistant1.GetImage(); mContourAssistant1.UpdateImage(); } } private void btnThreshold_Click(object sender, EventArgs e) { HOperatorSet.GenEmptyObj(out ThresholdObj); ThresholdObj.Dispose(); HOperatorSet.Threshold(MainImage1, out ThresholdObj, Convert.ToInt32(nUDThresholdMin.Value), Convert.ToInt32(nUDThresholdMax.Value)); mContourAssistant2.SetImage(MainImage1); MainImage2 = mContourAssistant2.GetImage(); mContourAssistant2.UpdateImage(); mContourAssistant2.UpdateObj(ThresholdObj); } private void btnSelectShape_Click(object sender, EventArgs e) { //先将物体分开 HOperatorSet.GenEmptyObj(out ConnectRegion); ConnectRegion.Dispose(); HOperatorSet.Connection(ThresholdObj, out ConnectRegion); //选择物体 HOperatorSet.GenEmptyObj(out ObjsSelect); ObjsSelect.Dispose(); HOperatorSet.SelectShape(ConnectRegion, out ObjsSelect, "area", "and", Convert.ToInt32(nUDAreaMin.Value), Convert.ToInt32(nUDAreaMax.Value)); mContourAssistant3.SetImage(MainImage1); MainImage3 = mContourAssistant3.GetImage(); mContourAssistant3.UpdateImage(); mContourAssistant3.UpdateObj(ObjsSelect, "green"); //将得到的结果载入到comboBox中 if (ObjsSelect.CountObj() == 0) return; cmbSelectObj.Items.Clear(); for (int i = 0; i < ObjsSelect.CountObj(); i++) { cmbSelectObj.Items.Add(i + 1); } cmbSelectObj.SelectedIndex = 0; } private void btnSelect_Click(object sender, EventArgs e) { HOperatorSet.GenEmptyObj(out SelectedObj); SelectedObj.Dispose(); HOperatorSet.SelectObj(ObjsSelect, out SelectedObj, cmbSelectObj.SelectedIndex + 1); mContourAssistant4.SetImage(MainImage1); MainImage4 = mContourAssistant4.GetImage(); mContourAssistant4.UpdateImage(); mContourAssistant4.UpdateObj(SelectedObj, "red"); HTuple area = null, row = null, col = null; HOperatorSet.AreaCenter(SelectedObj, out area, out row, out col); labArea.Text = area.ToString(); } private void btnRun_Click(object sender, EventArgs e) { para = new ContourParam(Convert.ToInt32(nUDThresholdMin.Value), Convert.ToInt32(nUDThresholdMax.Value), Convert.ToInt32(nUDAreaMin.Value), Convert.ToInt32(nUDAreaMax.Value), cmbSelectObj.SelectedIndex + 1); mContourAssistant1.SetPara(para); if (mContourAssistant1.mImage == null) return; mContourAssistant1.Run(); //窗口2显示 mContourAssistant2.SetImage(MainImage1); MainImage2 = mContourAssistant2.GetImage(); mContourAssistant2.UpdateImage(); mContourAssistant2.UpdateObj(mContourAssistant1.mThresholdObj); ThresholdObj = mContourAssistant1.mThresholdObj; //窗口3显示 mContourAssistant3.SetImage(MainImage1); MainImage3 = mContourAssistant3.GetImage(); mContourAssistant3.UpdateImage(); mContourAssistant3.UpdateObj(mContourAssistant1.mSelectObj, "green"); ObjsSelect = mContourAssistant1.mSelectObj; if (mContourAssistant1.mSelectObj.CountObj() == 0) return; cmbSelectObj.Items.Clear(); for (int i = 0; i < mContourAssistant1.mSelectObj.CountObj(); i++) { cmbSelectObj.Items.Add(i + 1); } //窗口4显示 mContourAssistant4.SetImage(MainImage1); MainImage4 = mContourAssistant4.GetImage(); mContourAssistant4.UpdateImage(); mContourAssistant4.UpdateObj(mContourAssistant1.mObject, "red"); SelectedObj = mContourAssistant1.mObject; } private void btnParaSave_Click(object sender, EventArgs e) { para = new ContourParam(Convert.ToInt32(nUDThresholdMin.Value), Convert.ToInt32(nUDThresholdMax.Value), Convert.ToInt32(nUDAreaMin.Value), Convert.ToInt32(nUDAreaMax.Value), cmbSelectObj.SelectedIndex + 1); string path = System.Windows.Forms.Application.StartupPath + "\\ContourConfige"; if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } path += "\\ContourConfige.xml"; SerializeFileTool sft = new SerializeFileTool(); sft.SetConfig(path, para); } private void cmbSelectObj_SelectedIndexChanged(object sender, EventArgs e) { } } }