如何在两张图片中找到相应的点?

时间:2016-05-11 16:15:11

标签: c++ opencv image-processing

我正在处理图片注册。我正在使用OpenCV。我有两个图像I1(参考图像),I2(当前图像)。我确定它们之间的仿射运动然后扭曲I1以查看它与当前图像I2对齐的程度。此时我有3张图像I1,I1'(失真)和I2。

现在我需要在当前图像I2上设置4个点(这是用于GUI上的显示)并且需要在初始参考图像I1上找到相应的4个点(在应用运动之前)。 GUI突出显示了一些功能差异,需要在I1和I2上来回切换,以便用户了解差异。

这四个点基本上是图像中的任意矩形。例如:

cv::Point P1, P2, P3, P4;
P1.x = I2.cols / 4;
P1.y = I2.rows / 4;
P2.x = I2.cols * 3 / 4;
P2.y = I2.rows / 4;
P3.x = I2.cols * 3 / 4;
P3.y = I2.rows * 3 / 4;
P4.x = I2.cols / 4;
P4.y = I2.rows * 3 / 4;

我需要在参考图像I1上找到P1,P2,P3,P4的对应点。 关于如何使用OpenCV做到这一点的任何想法?还是其他任何方式?

1 个答案:

答案 0 :(得分:0)

你写的是你有一个仿射矩阵,它将l1扭曲为l2。

您所需要的只是通过invertAffineTransform反转仿射变换M以获得矩阵M'

然后应用这个2x3矩阵M'要点:

(pseudocode)

P1_onL1 = M' * [P1.x, P1.y, 1].t()

其中.t()表示转置,因此您需要将矩阵乘以列向量。