使用Opencv提取图像的公共部分
Extract common part of images with Opencv
我正在编写一个程序来查找图像之间的差异。现在,我正在寻找 AKAZE 的特征,所以我有两张图片的共同点。问题是这两张图片只有一部分是相同的。如何从两个图像中提取公共部分?为了更好的解释:我需要从第一张图像中提取公共部分,然后从第二张图像中提取公共部分,这样我就可以做 absdiff
来寻找差异。
我正在用 c++
编程
感谢大家!
您应该将第一个图像变形到第二个图像上。您可以使用关键点对应的 findHomography
和 perspectiveTransform
函数。您可以找到您需要的大部分代码 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!
我正在编写一个程序来查找图像之间的差异。现在,我正在寻找 AKAZE 的特征,所以我有两张图片的共同点。问题是这两张图片只有一部分是相同的。如何从两个图像中提取公共部分?为了更好的解释:我需要从第一张图像中提取公共部分,然后从第二张图像中提取公共部分,这样我就可以做 absdiff
来寻找差异。
我正在用 c++
感谢大家!
您应该将第一个图像变形到第二个图像上。您可以使用关键点对应的 findHomography
和 perspectiveTransform
函数。您可以找到您需要的大部分代码 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!