Я пишу программу, которая находит различия между изображениями. На данный момент я нахожу функции с AKAZE, поэтому у меня есть общая точка зрения на 2 изображения. Проблема в том, что эти 2 изображения имеют только общую часть. Как я могу извлечь общую часть из обоих изображений? Для лучшего объяснения: мне нужно извлечь общую часть из первого изображения, а затем из второго, чтобы я мог сделать absdiff
для нахождения разницы.
Я программирую на с ++
Спасибо всем!
Вам следует деформироваться первое изображение на второе. Ты можешь использовать findHomography
а также perspectiveTransform
функции даны соответствием ваших ключевых точек. Вы можете найти большую часть кода, который вам нужен Вот.
Обновить
Между прочим, мне пришлось делать в основном то же самое сегодня. Проверено на серых изображениях (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!