private void imgTransformed_MouseMove(object sender, MouseEventArgs e) { Point p = Image2BitmapCoordinate(imgTransformed, e.GetPosition(imgTransformed)); p.X = p.X / imgTransformed.Source.Width * 2 - 0.5; // グリッド内[0,1] p.Y = p.Y / imgTransformed.Source.Height * 2 - 0.5; // グリッド内[0,1] p.X = p.X * (vm.DstMaxX - vm.DstMinX) + vm.DstMinX; // グリッド内[DstMinX,DstMaxX] p.Y = p.Y * (vm.DstMaxY - vm.DstMinY) + vm.DstMinY; // グリッド内[DstMinY,DstMaxY] vm.DstMousePos = p; if (imgTransformed.Source == null) return; CV.Mat dstMousePos = new CV.Mat(3, 1, CV.MatType.CV_64F, new double[] { vm.DstMousePos.X, vm.DstMousePos.Y, 1 }); CV.Mat homographyMatrixInv = new CV.Mat(3, 3, CV.MatType.CV_64F, vm.HomographyMatrix).Inv();//homographyはvm.HomographyMatrixの参照 CV.Mat srcMousePos = new CV.Mat(3, 1, CV.MatType.CV_64F); srcMousePos = homographyMatrixInv * dstMousePos; vm.SrcMousePos = new Point(srcMousePos.At<double>(0, 0) / srcMousePos.At<double>(0, 2), srcMousePos.At<double>(0, 1) / srcMousePos.At<double>(0, 2)); }
private void imgRaw_MouseMove(object sender, MouseEventArgs e) { vm.SrcMousePos = Image2BitmapCoordinate(imgRaw, e.GetPosition(imgRaw)); if (imgTransformed.Source == null) return; CV.Mat srcMousePos = new CV.Mat(3, 1, CV.MatType.CV_64F, new double[] { vm.SrcMousePos.X, vm.SrcMousePos.Y, 1 }); CV.Mat homographyMatrix = new CV.Mat(3, 3, CV.MatType.CV_64F, vm.HomographyMatrix);//homographyはvm.HomographyMatrixの参照 CV.Mat dstMousePos = new CV.Mat(3, 1, CV.MatType.CV_64F); dstMousePos = homographyMatrix * srcMousePos; vm.DstMousePos = new Point(dstMousePos.At<double>(0, 0) / dstMousePos.At<double>(0, 2), dstMousePos.At<double>(0, 1) / dstMousePos.At<double>(0, 2)); }