我正在编写一个程序来查找图像之间的差异。目前,我正在使用 AKAZE 寻找特征,因此我知道了这两张图像的共同点。问题是这两张图片只有一部分是共同的。如何从两幅图像中提取共同部分?为了更好的解释:我需要从第一张图像中提取公共部分,然后从第二张图像中提取公共部分,所以我可以这样做absdiff
为了寻找差异。
我正在用 c++ 编程
谢谢大家!
你应该warp将第一张图像复制到第二张图像上。您可以使用findHomography
and perspectiveTransform
由关键点的对应关系给出的函数。您可以找到您需要的大部分代码here.
Update
顺便说一句,我今天必须做基本相同的事情。它在灰度图像上进行了测试(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!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)