Extract common part of images with Opencv

喜欢而已 提交于 2019-12-02 04:01:37

问题


I'm writing a program that find differences between images. For now, I'm finding features with AKAZE, so I've the common point of the 2 images. The problem is that these 2 images have only a part in common. How can I extract the common part from both images? For better explanation: I need to extract the common part from the first image and then from the second, so I can do absdiff for finding difference. I'm programming in c++

Thanks to all!


回答1:


You should warp the first image onto the second. You can use findHomography and perspectiveTransform functions given by the correspondence of your keypoints. You can find most of the code you need here.

Update


Incidentally, I had to do basically the same stuff today. It's tested on gray images (Mat1b), but should require only minor changes to apply to rgb images (Mat3b). Here the relevant parts of the code:

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!


来源:https://stackoverflow.com/questions/31255987/extract-common-part-of-images-with-opencv

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!