示例#1
0
        private Tuple <PointD, double> CaptrueDelta()
        {
            //拍照前延时
            Thread.Sleep(this.settlingTime);
            //拍照获取图像
            byte[] imgData = Machine.Instance.Camera.TriggerAndGetBytes(TimeSpan.FromSeconds(1)).DeepClone();
            //移动到拍照高度
            if (Machine.Instance.Setting.MachineSelect == MachineSelection.RTV)
            {
                Machine.Instance.Robot.MoveToMarkZAndReply();
            }
            //抓圆,得到像素坐标
            if (!this.chxAsv.Checked)
            {
                CalibMap.excuteCaliper(imgData, Machine.Instance.Camera.Executor.ImageWidth, Machine.Instance.Camera.Executor.ImageHeight,
                                       ref outX, ref outY, ref outR);
            }
            else
            {
                this.inspection.Execute(imgData, Machine.Instance.Camera.Executor.ImageWidth, Machine.Instance.Camera.Executor.ImageHeight);
                outX = this.inspection.PixResultX;
                outY = this.inspection.PixResultY;
                outR = this.inspection.PixResultR;
            }
            //像素坐标转机械坐标
            double scale = 0;
            PointD p     = Machine.Instance.Camera.ToMachine(outX, outY);

            CalibBy9d.GetScale(ref scale);
            this.BeginInvoke(new MethodInvoker(() =>
            {
                this.LblTitle.Text = string.Format("deltaX = {0}, deltaY = {1}.", Math.Round(p.X, 3), Math.Round(p.Y, 3));
            }));
            return(new Tuple <PointD, double>(p, outR * scale));
        }
示例#2
0
        public PointD ToMachine(double imgx, double imgy)
        {
            double x = 0, y = 0;

            CalibBy9d.ConvertImg2Phy(ref imgx, ref imgy, ref x, ref y);
            PointD rtn = new PointD(-x, -y);

            //if (this.Prm.ReverseX)
            //{
            //    rtn.X *= -1;
            //}
            //if (this.Prm.ReverseY)
            //{
            //    rtn.Y *= -1;
            //}
            return(rtn);
        }