Opencv 如何使用单应性?

Opencv 如何使用单应性?,opencv,distortion,homography,Opencv,Distortion,Homography,我正在开发一个程序,在该程序中,我接收到两张相同场景的图片,但其中一张有失真: Mat img_1 = imread(argv[1], 0); // nORMAL pICTURE Mat img_2 = imread(argv[2], 0); // PICTURE WITH DISTORTION 我想评估扭曲的模式,并能够对其进行补偿 我已经能够找到关键点,我想知道我是否可以使用函数cv::findHomography来实现这个。。。在任何情况下,如何做到这一点?单应将一个图像平面映射到另

我正在开发一个程序,在该程序中,我接收到两张相同场景的图片,但其中一张有失真:

Mat img_1 = imread(argv[1], 0);  // nORMAL pICTURE
Mat img_2 = imread(argv[2], 0);  // PICTURE WITH DISTORTION
我想评估扭曲的模式,并能够对其进行补偿


我已经能够找到关键点,我想知道我是否可以使用函数cv::findHomography来实现这个。。。在任何情况下,如何做到这一点?

单应将一个图像平面映射到另一个图像平面。这意味着,如果你的失真可以表示为3x3矩阵,findHomography就是你想要的。如果不是,那就不是你想要的。它将对应点的两个向量作为输入,并将返回最能代表这些点之间变换的3x3矩阵。

好的,因此假设我有两张图片(A和B),一张与另一张稍微扭曲,其中它们之间存在平移、旋转和缩放差异(例如,这些图片:)


SSooooo我需要的是在图片B中应用一种变换,以补偿存在的失真/平移/旋转,从而使两张图片具有相同的大小、方向,并且没有平移

我已经提取了点并找到了单应性,如下所示。但是我不知道如何使用单应变换
matimg\u B
,所以它看起来像
matimg\u A
。有什么想法吗

//-- Localize the object from img_1 in img_2
std::vector<Point2f> obj;
std::vector<Point2f> scene;

for (unsigned int i = 0; i < good_matches.size(); i++) {
    //-- Get the keypoints from the good matches
    obj.push_back(keypoints_object[good_matches[i].queryIdx].pt);
    scene.push_back(keypoints_scene[good_matches[i].trainIdx].pt);
}

Mat H = findHomography(obj, scene, CV_RANSAC);
/--在img_2中从img_1定位对象
std::向量obj;
矢量场景;
for(无符号整数i=0;i

干杯,

这似乎是个问题本身。把它当作一个新问题来问,它不是答案。