c++ - 使用Opencv提取图像的公共(public)部分

标签 c++ opencv difference opencv-features2d

我正在编写一个程序来查找图像之间的差异。现在,我正在寻找 AKAZE 的特征,所以我有两张图片的共同点。问题是这两张图片只有一部分是相同的。如何从两个图像中提取公共(public)部分?为了更好的解释:我需要从第一张图像中提取公共(public)部分,然后从第二张图像中提取公共(public)部分,这样我就可以执行 absdiff 来寻找差异。 我正在用 C++ 编程

感谢大家!

最佳答案

您应该变形第一张图片到第二张图片上。您可以使用关键点的对应关系给出的 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!

关于c++ - 使用Opencv提取图像的公共(public)部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31255987/

相关文章:

c++ - BlackBerry-10 连接功能出错

c++ - 当我使用 SDL_RECT 时表面消失

c++ - OpenCV 中的连接组件

opencv - 如何在 OpenCV 中定义分水岭的标记?

Java Enum<T> 与 T 作为变量类型

c++ - 无锁堆栈 : visibility issue when checking hazard pointers during pop()?

c++ - 是否可以在其范围之外访问局部变量的内存?

opencv - 如何计算IplImage的 “Arctan”和 “Pow”?

numpy - 两个 numpy 数组的平均绝对差

python - Pandas 根据其他行的和/差添加新行