Извлечь общую часть изображений с Opencv

Я пишу программу, которая находит различия между изображениями. На данный момент я нахожу функции с AKAZE, поэтому у меня общая точка зрения на 2 изображения. Проблема в том, что эти 2 изображения имеют только общую часть. Как я могу извлечь общую часть из обоих изображений? Для лучшего объяснения: мне нужно извлечь общую часть из первого изображения, а затем из второго, чтобы я мог сделать absdiff для нахождения разницы. Я программирую на с ++

Спасибо всем!

1 ответ

Решение

Вы должны деформировать первое изображение на второе. Ты можешь использовать 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!
Другие вопросы по тегам