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)); }
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); }