我正在开发一个程序,我收到两张相同场景的图片,但其中一张有失真:
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)与另一张略有失真,它们之间存在平移、旋转和比例差异(例如,这些图片:)
Ssoooooooo 我需要的是在图片 B 中应用一种转换,以便补偿存在的失真/平移/旋转,以使两张图片具有相同的大小、方向且没有平移
我已经提取了点并找到了 Homography,如下所示。但我不知道如何使用 Homography 进行转换Mat img_B
,所以它看起来像Mat img_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);
干杯,