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

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

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

2

Решение

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

Другие решения


По вопросам рекламы [email protected]