private static int[] GetAdjust(Image <Gray, byte> ImgCap, Image <Gray, byte> ImgGerber, int RangeX, int RangeY) { int x_ok = 0; int y_ok = 0; double diff = 2448 * 2018; for (int x = -RangeX; x < RangeX; x++) { for (int y = -RangeY; y < RangeY; y++) { using (Image <Gray, byte> imgTransform = ImageProcessingUtils.ImageTransformation(ImgCap.Copy(), x, y)) { CvInvoke.AbsDiff(imgTransform, ImgGerber, imgTransform); int count = CvInvoke.CountNonZero(imgTransform); if (count < diff) { diff = count; x_ok = x; y_ok = y; } } } } return(new int[] { x_ok, y_ok }); }
private void cbFOV_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (!mLoaded) { return; } if (mMark == null) { CaptureMark(); } int id = -1; this.Dispatcher.Invoke(() => { id = cbFOV.SelectedIndex; }); if (cbFOV.SelectedIndex > -1) { System.Drawing.Point fov = mAnchorFOV[id]; int x = fov.X; int y = fov.Y; bool lightStrobe = !Convert.ToBoolean(mParam.LIGHT_MODE); if (mImage != null) { mImage.Dispose(); mImage = null; } mLog.Info(string.Format("{0}, Position Name : {1}, X = {2}, Y = {3}", "Moving TOP Axis", "FOV " + (id + 1).ToString(), x, y)); using (Image <Bgr, byte> image = VI.CaptureImage.CaptureFOV(mPlcComm, mCamera, fov, 1000)) { mImage = ImageProcessingUtils.ImageRotation(image, new System.Drawing.Point(image.Width / 2, image.Height / 2), -mModel.AngleAxisCamera * Math.PI / 180.0).Copy(); mImage = ImageProcessingUtils.ImageTransformation(mImage, mMarkAdjust.X, mMarkAdjust.Y); ShowDetail(); } } }