Exemplo n.º 1
0
        //玻璃板校验2-yexing
        private void btnCreatePoint_Jig_Click(object sender, EventArgs e)
        {
            this.bStartChkCailb_Jig.Text = "开始测量";
            bRun = false;
            try
            {
                float orgX = float.Parse(this.textOrgX.Text);
                float orgY = float.Parse(this.textOrgY.Text);

                float mark1X = float.Parse(this.textMark1X.Text);
                float mark1Y = float.Parse(this.textMark1Y.Text);

                float mark2X = float.Parse(this.textMark2X.Text);
                float mark2Y = float.Parse(this.textMark2Y.Text);

                short col = short.Parse(this.textCol_Jig.Text);
                short row = short.Parse(this.textRow_Jig.Text);

                this.ChkPoint_Jig         = CPKTools.ExpandtoAddPoints(new PointF(orgX, orgY), new PointF(mark1X, mark1Y), new PointF(mark2X, mark2Y), col, row);
                this.ChkPoint_Jig_Machine = new List <PointF>();
                this.ChkPoint_Jig_Act     = new List <PointF>();
            }
            catch (Exception)//                            //+ "JigPicture\\"
            {
            }
        }
Exemplo n.º 2
0
        private void btnFindTemp_Click(object sender, EventArgs e)
        {
            CPKTools    tools = new CPKTools();
            VisionImage align = this.image_Edit.Image;

            VisionImage image = Form_Main.Instance.imageSet.Image;
            Roi         roi   = Form_Main.Instance.imageSet.Roi;
            short       Score = 600;
            double      MinR  = -10;
            double      MaxR  = 10;
            short       rtn   = 0;

            Variable.CamReturn camReturn = new Variable.CamReturn();

            // 初步匹配
            rtn = Form_Main.Instance.CamDetect_SearchGeometric(image, align, roi, Score, 1, MinR, MaxR, 100, 100, 0, 25, ref camReturn, 0, 0);
            if (rtn != 0)
            {
                MessageBox.Show("寻找模板失败,请检查参数!!!");
            }

            // 记录ROI 的坐标
            if (roi.Count > 0)
            {
                RectangleContour rect = (RectangleContour)roi[0].Shape;
                // save rect
                string strRoi = string.Format("{0},{1},{2},{3}", rect.Top, rect.Left, rect.Width, rect.Height);
                this.cpkIni.IniWriteValue("vision", "TemplateRoi", strRoi);
            }
        }
Exemplo n.º 3
0
        private void btnFindCorner_Click(object sender, EventArgs e)
        {
            PointContour cross = new PointContour();
            LineContour  line1 = new LineContour();
            LineContour  line2 = new LineContour();

            CPKTools.FindCorss(this.cbxCorner.SelectedIndex, this.cpkIni, ref cross, ref line1, ref line2);
        }
Exemplo n.º 4
0
        private void button2_Click(object sender, EventArgs e)
        {
            Form_Main.Instance.All_ZGoSafe(this.variable);
            //Form_Main.Instance.LightON_RedU();
            Form_Main.Instance.StartGrabImage();
            ExcelHelper helper = new ExcelHelper();

            helper.ExcelReadToCpkItem(this.PastePath, ref this.cpkResult);
            if (!Directory.Exists("C://CPK"))
            {
                Directory.CreateDirectory("C://CPK");
            }
            // 设置相机可捕获状态
            // 切换光源
            // 设置曝光
            double gain   = 1;
            double offset = 0;
            int    cycle  = 1;

            gain   = double.Parse(this.tGainValue.Text);
            offset = double.Parse(this.tOffsetValue.Text);
            cycle  = int.Parse(this.tHanldeCycle.Text);
            Thread thd = new Thread(() =>
            {
                if (this.chkUsePastePoint.Checked)
                {
                    for (int i = 0; i < this.CpkResult.Count; i++)
                    {
                        CPK_ResultItem item = this.CpkResult[i];
                        CPKTools.GetCPK(this.cpkIni, this.variable, gain, offset, cycle, ref item);
                        Form_Main.Instance.imageSet.Image.Type = ImageType.U8;
                        Form_Main.Instance.imageSet.Image.WriteBmpFile(string.Format("C://CPK//{0}.bmp", i));
                        Form_Main.Instance.imageSet.Image.Overlays.Default.Merge();
                        Form_Main.Instance.imageSet.Image.WritePngFile(string.Format("C://CPK//{0}.png", i));
                    }
                }
                else
                {
                    for (int i = 0; i < this.chkPoint.Count && i < this.CpkResult.Count; i++)
                    {
                        CPK_ResultItem item = this.CpkResult[i];
                        item.Pos            = this.chkPoint[i];
                        CPKTools.GetCPK(this.cpkIni, this.variable, gain, offset, cycle, ref item);
                        Form_Main.Instance.imageSet.Image.Type = ImageType.U8;
                        Form_Main.Instance.imageSet.Image.Overlays.Default.Merge();
                        Form_Main.Instance.imageSet.Image.WritePngFile(string.Format("C://CPK//{0}.png", i + 1));
                    }
                }

                MessageBox.Show("测量完成,请导出数据");
            });

            thd.Start();
            this.btnOptimize.Enabled = true;
        }
Exemplo n.º 5
0
        private void btnStduyTemp_Click(object sender, EventArgs e)
        {
            CPKTools    tools = new CPKTools();
            VisionImage align = new VisionImage();

            Form_Main.Instance.Extract_LearnGemetric(Form_Main.Instance.imageSet.Image, align);
            Algorithms.Copy(align, this.image_Edit.Image);
            // save image
            //System.AppDomain.CurrentDomain.BaseDirectory + "Configure\\
            align.WriteVisionFile(Variable.sPath_Configure + "CPK_Template.png");
        }
Exemplo n.º 6
0
        private void bOutputCailb_Click(object sender, EventArgs e)
        {
            if (CailbResult != null)
            {
                #region 导出到Excel表
                int    row   = int.Parse(this.tJigRow.Text); // 行
                int    col   = int.Parse(this.tJigCol.Text); // 列
                double distX = float.Parse(this.tJigDx.Text);
                double distY = float.Parse(this.tJigDy.Text);
                // 计算 间距
                for (int i = 0; i < row; i++)
                {
                    for (int j = 0; j < col; j++)
                    {
                        if (CailbResult[i, j].Real_CircleCenter.X == 0 && CailbResult[i, j].Real_CircleCenter.Y == 0)
                        {
                            CailbResult[i, j].RightDist = 0;
                            CailbResult[i, j].DownDist  = 0;
                            continue;
                        }

                        if (j != 0 && j < col)// 右间距
                        {
                            if (CailbResult[i, 0].Real_CircleCenter.X != 0 && CailbResult[i, 0].Real_CircleCenter.Y != 0)
                            {
                                CailbResult[i, j].RightDist = CPKTools.GetDist(ref CailbResult[i, j].Real_CircleCenter, ref CailbResult[i, 0].Real_CircleCenter) - j * distX;
                            }
                            else
                            {
                                CailbResult[i, j].RightDist = 0;
                            }
                        }

                        if (i != 0 && i < row)// 下间距
                        {
                            if (CailbResult[0, j].Real_CircleCenter.X != 0 && CailbResult[0, j].Real_CircleCenter.Y != 0)
                            {
                                CailbResult[i, j].DownDist = CPKTools.GetDist(ref CailbResult[i, j].Real_CircleCenter, ref CailbResult[0, j].Real_CircleCenter) - i * distY;
                            }
                            else
                            {
                                CailbResult[i, j].DownDist = 0;
                            }
                        }
                    }
                }

                CPKTools.SaveCailbReport(ref CailbResult, row, col);
                #endregion
            }
        }
Exemplo n.º 7
0
        private void btnFindCircle1_Click(object sender, EventArgs e)
        {
            if (Form_Main.Instance.imageSet.Roi.Count > 0 && Form_Main.Instance.imageSet.Roi[0].Shape.GetType() == typeof(RectangleContour))
            {
                short        rMin   = short.Parse(this.upCircleRmin.Text);
                short        rMax   = short.Parse(this.upCircleRmax.Text);
                PointContour center = new PointContour();
                double       radius = 0;
                VisionImage  image  = Form_Main.Instance.GrabImage2View(Camera.CAM.Top);

                RectangleContour rect = (RectangleContour)Form_Main.Instance.imageSet.Roi[0].Shape;
                CPKTools.FindCircle(image, rect, rMin, rMax, ref center, ref radius, 0, 0, 0);
                this.upCurR.Text = radius.ToString();
            }
        }
Exemplo n.º 8
0
        /// <summary>
        /// 3点 阵列
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnCreatePoint_Click(object sender, EventArgs e)
        {
            float orgX = float.Parse(this.textOrgX.Text);
            float orgY = float.Parse(this.textOrgY.Text);

            float mark1X = float.Parse(this.textMark1X.Text);
            float mark1Y = float.Parse(this.textMark1Y.Text);

            float mark2X = float.Parse(this.textMark2X.Text);
            float mark2Y = float.Parse(this.textMark2Y.Text);

            short col = short.Parse(this.textCol.Text);
            short row = short.Parse(this.textRow.Text);

            this.ChkPoint = CPKTools.ExpandtoAddPoints(new PointF(orgX, orgY), new PointF(mark1X, mark1Y), new PointF(mark2X, mark2Y), col, row);
            this.SaveInfo();
        }
Exemplo n.º 9
0
        private void bStartChkCailb_Click(object sender, EventArgs e)
        {
            if (Thd_Cailb == null || !Thd_Cailb.IsAlive)
            {
                Thd_Cailb = new Thread(() =>
                {
                    #region 开始测量
                    try
                    {
                        Form_Main.Instance.StartGrabImage();

                        int row               = int.Parse(this.tJigRow.Text); // 行
                        int col               = int.Parse(this.tJigCol.Text); // 列
                        CailbResult           = new Jig_ResultItem[row, col];
                        PointF basePoint      = new PointF();
                        basePoint.X           = float.Parse(this.tCailbBaseX.Text);
                        basePoint.Y           = float.Parse(this.tCailbBaseY.Text);
                        double distX          = float.Parse(this.tJigDx.Text);
                        double distY          = float.Parse(this.tJigDy.Text);
                        RectangleContour rect = (RectangleContour)Form_Main.Instance.imageSet.Roi[0].Shape;
                        short rMin            = short.Parse(this.upCircleRmin.Text);
                        short rMax            = short.Parse(this.upCircleRmax.Text);
                        PointContour center   = new PointContour();
                        double radius         = 0;


                        double gain   = 1;
                        double offset = 0;
                        double cycle  = 1;

                        gain   = double.Parse(this.tGainValue.Text);
                        offset = double.Parse(this.tOffsetValue.Text);
                        cycle  = double.Parse(this.tHanldeCycle.Text);

                        for (int i = 0; i < row; i++)
                        {
                            for (int j = 0; j < col; j++)
                            {
                                Jig_ResultItem item = new Jig_ResultItem();
                                item.MachinePos     = this.chkPoint[i * col + j];
                                //item.MachinePos.X = (float)(basePoint.X + distX * j);
                                //item.MachinePos.Y = (float)(basePoint.Y + distY * i);

                                // 移动到目标位
                                Form_Main.Instance.XYGoPosTillStop(20 * 1000, item.MachinePos, variable);

                                //Thread.Sleep(100);
                                // 获得上相机图像
                                VisionImage image = Form_Main.Instance.GrabImage2View(Camera.CAM.Top);

                                // 预处理
                                for (int time = 0; time < cycle; ++time)
                                {
                                    image = Form_Main.Instance.GainOffset(image, gain, offset);
                                }

                                Algorithms.Copy(image, Form_Main.Instance.imageSet.Image);

                                // 找圆
                                if (CPKTools.FindCircle(image, rect, rMin, rMax, ref center, ref radius, 0, 0, 0))
                                {
                                    item.Image_CircleCenter.X = (float)center.X;
                                    item.Image_CircleCenter.Y = (float)center.Y;
                                    item.Real_CircleCenter    = Camera.CameraDefine.Instance[Camera.CAM.Top].ImagePt2WorldPt(item.MachinePos, center, 0);
                                }

                                image.Dispose();
                                CailbResult[i, j] = item;
                            }
                        }

                        // 计算 间距
                        for (int i = 0; i < row; i++)
                        {
                            for (int j = 0; j < col; j++)
                            {
                                if (CailbResult[i, j].Real_CircleCenter.X == 0 && CailbResult[i, j].Real_CircleCenter.Y == 0)
                                {
                                    CailbResult[i, j].RightDist = 0;
                                    CailbResult[i, j].DownDist  = 0;
                                    continue;
                                }

                                if (j != 0 && j < col)// 右间距
                                {
                                    CailbResult[i, j].RightDist = CPKTools.GetDist(ref CailbResult[i, j].Real_CircleCenter, ref CailbResult[i, 0].Real_CircleCenter) - j * distX;
                                }

                                if (i != 0 && i < row)// 下间距
                                {
                                    CailbResult[i, j].DownDist = CPKTools.GetDist(ref CailbResult[i, j].Real_CircleCenter, ref CailbResult[0, j].Real_CircleCenter) - i * distY;
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                    #endregion
                });

                Thd_Cailb.Start();
            }
        }
Exemplo n.º 10
0
        private void btnFindLine_Click(object sender, EventArgs e)
        {
            int selectSearchDir = 0;

            if (this.rBtn_L2R.Checked)
            {
                selectSearchDir = 0;
            }
            else if (this.rBtn_R2L.Checked)
            {
                selectSearchDir = 1;
            }
            else if (this.rBtn_U2D.Checked)
            {
                selectSearchDir = 2;
            }
            else
            {
                selectSearchDir = 3;
            }

            int selectMode = 0;

            if (this.rBtn_B2W.Checked)
            {
                selectMode = 0;
            }
            else
            {
                selectMode = 1;
            }

            RectangleContour roi = (RectangleContour)Form_Main.Instance.imageSet.Roi[0].Shape;

            VisionImage image = Form_Main.Instance.imageSet.Image;

            PointContour line_Start = new PointContour();
            PointContour line_End   = new PointContour();

            short rtn = CPKTools.FitLine(image, roi, 40.0, selectSearchDir, selectMode, ref line_Start, ref line_End);

            if (rtn == 0)
            {
                string header     = string.Format("vision{0}", this.cbxCorner.SelectedIndex);
                int    selectLine = 0;

                if (this.rBtn_HLine1.Checked)
                {
                    selectLine = 0;
                }
                else if (this.rBtn_VLine1.Checked)
                {
                    selectLine = 1;
                }

                this.cpkIni.IniWriteValue(header, string.Format("SearchDirection{0}", selectLine), selectSearchDir.ToString());
                this.cpkIni.IniWriteValue(header, string.Format("EdgePolaritySearchMode{0}", selectLine), selectMode.ToString());

                string strRoi = string.Format("{0},{1},{2},{3}", roi.Left, roi.Top, roi.Width, roi.Height);
                this.cpkIni.IniWriteValue(header, string.Format("LineROI{0}", selectLine), strRoi);
            }
            else
            {
                MessageBox.Show("直线检测失败");
            }
        }
Exemplo n.º 11
0
 private void button3_Click(object sender, EventArgs e)
 {
     CPKTools.SaveReport(this.CpkResult);
 }
Exemplo n.º 12
0
        /// <summary>
        /// 读取信息
        /// </summary>
        private void LoadInfo()
        {
            this.cpkIni    = new IniFile(Variable.sPath_Configure + "CalibConfig.ini");
            this.PastePath = this.cpkIni.IniReadValue("main", "PastePath");
            this.chkUsePastePoint.Checked = this.cpkIni.IniReadValue("main", "UsePaste") == "False" ? false : true;
            this.textOrgX.Text            = this.cpkIni.IniReadValue("point", "OrgPosX");
            this.textOrgY.Text            = this.cpkIni.IniReadValue("point", "OrgPosY");

            this.textMark1X.Text = this.cpkIni.IniReadValue("point", "Mark1PosX");
            this.textMark1Y.Text = this.cpkIni.IniReadValue("point", "Mark1PosY");

            this.textMark2X.Text = this.cpkIni.IniReadValue("point", "Mark2PosX");
            this.textMark2Y.Text = this.cpkIni.IniReadValue("point", "Mark2PosY");

            this.textCol.Text = this.cpkIni.IniReadValue("point", "Col");
            this.textRow.Text = this.cpkIni.IniReadValue("point", "Row");

            this.tStrength.Text    = this.cpkIni.IniReadValue("vision", "Strength");
            this.tGainValue.Text   = this.cpkIni.IniReadValue("vision", "Gain");
            this.tOffsetValue.Text = this.cpkIni.IniReadValue("vision", "Offset");
            this.tHanldeCycle.Text = this.cpkIni.IniReadValue("vision", "Cycle");

            this.tCPKXValue.Text = this.cpkIni.IniReadValue("main", "CPKXValue");
            this.tCPKYValue.Text = this.cpkIni.IniReadValue("main", "CPKYValue");

            this.tCailbBaseX.Text = this.cpkIni.IniReadValue("calib", "CailbBaseX");
            this.tCailbBaseY.Text = this.cpkIni.IniReadValue("calib", "CailbBaseY");

            this.upCircleRmin.Text = this.cpkIni.IniReadValue("calib", "MinRaduis");
            this.upCircleRmax.Text = this.cpkIni.IniReadValue("calib", "MaxRaduis");

            this.tJigRow.Text = this.cpkIni.IniReadValue("calib", "JigRow");
            this.tJigCol.Text = this.cpkIni.IniReadValue("calib", "JigCol");

            this.tJigDx.Text = this.cpkIni.IniReadValue("calib", "JigDistX");
            this.tJigDy.Text = this.cpkIni.IniReadValue("calib", "JigDistY");


            try
            {
                //System.AppDomain.CurrentDomain.BaseDirectory + "Configure\\CPK.ini"
                this.image_Edit.Image.ReadVisionFile(Variable.sPath_Configure + "CPK_Template.png");

                this.ChkPoint.Clear();
                float orgX = float.Parse(this.textOrgX.Text);
                float orgY = float.Parse(this.textOrgY.Text);

                float mark1X = float.Parse(this.textMark1X.Text);
                float mark1Y = float.Parse(this.textMark1Y.Text);

                float mark2X = float.Parse(this.textMark2X.Text);
                float mark2Y = float.Parse(this.textMark2Y.Text);

                short col = short.Parse(this.textCol.Text);
                short row = short.Parse(this.textRow.Text);

                this.ChkPoint = CPKTools.ExpandtoAddPoints(new PointF(orgX, orgY), new PointF(mark1X, mark1Y), new PointF(mark2X, mark2Y), col, row);
            }
            catch
            {
                MessageBox.Show("读取坐标失败");
            }
        }