使用Opencv

时间:2015-07-06 21:30:26

标签: c++ opencv difference opencv-features2d

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

感谢所有人!

1 个答案:

答案 0 :(得分:1)

你应该将第一张图像扭曲到第二张图像上。您可以使用关键点对应关键字给出的findHomographyperspectiveTransform函数。您可以找到所需的大部分代码here

更新

顺便说一下,我今天必须做同样的事情。它已在灰色图像(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!