使用Opencv提取图像的公共部分

Extract common part of images with Opencv

本文关键字:公共部 图像 Opencv 提取 使用      更新时间:2023-10-16

我正在编写一个程序来查找图像之间的差异。目前,我正在寻找AKAZE的功能,所以我有这两张图片的共同点。问题是这两个图像只有一个共同点。如何从两幅图像中提取共同部分?为了更好地解释:我需要从第一张图像中提取公共部分,然后从第二张图像中,这样我就可以做absdiff来寻找差异。我正在用c++编程

感谢大家!

您应该将第一个图像扭曲到第二个图像上。您可以使用关键点对应关系给出的findHomographyperspectiveTransform函数。你可以在这里找到你需要的大部分代码。

更新


顺便说一句,我今天不得不做基本上相同的事情。它在灰度图像(Mat1b(上进行了测试,但只需要进行微小的更改即可应用于rgb图像(Mat3b(。这里是代码的相关部分:

Mat1b A = imread("...");
Mat1b B = imread("...");
vector<Point2f> ptsA; 
vector<Point2f> ptsB;
// Fill ptsA, ptsB with the points given by the match of your descriptors.
Mat H = findHomography(ptsA, ptsB, CV_RANSAC); // With ransac is more robust to outliers
Mat1b warpedA;
warpPerspective(A, warpedA, H, B.size());
// Now compute diff
Mat1b res;
absdiff(warpedA, B, res);
// res is what you are looking for!