使用Homography

时间:2018-05-25 11:40:26

标签: c# image opencv image-processing

我有两张相同的图片,但第二张图片是扭曲的并且尺寸不同。我希望能够在第一张图片上选择一个点,并在第二张图片上找到完全相同的点。 图片的同步将在每张图片上以4个点进行。

例:
正常的图片 enter image description here

Distorded picture enter image description here

结果将是一个函数从第一张图片获得X,Y点并返回X',Y'对应于第二张图片上的完全相同的点。

我是OpenCV的findHomography()函数,它返回一个Homography矩阵,但在所有例子中,这个矩阵用于使用warpPerspective()扭曲第二个图像,这不是我想要的。我只想要两张图片之间的相应坐标/像素。

有关如何在C#中执行此操作的任何提示? (是否使用OpenCV)

编辑:

点数示例:

正常情况:[250,25],[250,287],[399,287],[400,28]

目标图片:[0,0],[2098,29538],[19127,28164],[17097,-1200]

使用OPEN CV编辑:

OpenCvSharp.Mat hCv = OpenCvSharp.Cv2.FindHomography(srcPoints, dstPoints);
OpenCvSharp.Point2d[] resultCv = OpenCvSharp.Cv2.PerspectiveTransform(targetCv, hCv);

1 个答案:

答案 0 :(得分:1)

感谢Alexander Reynolds的评论,我终于使用了OpenCvSharp 3库。 您可以使用以下方法获得单应性矩阵:

homographyMatrix = OpenCvSharp.Cv2.FindHomography(originalPicturePoints, targetPicturePoints);

,然后从原始图片中获取目标图片上的任何点:

targetPoint = OpenCvSharp.Cv2.PerspectiveTransform(orignalPoint, homographyMatrix);