Сшиваем 2 изображения в opencv - PullRequest
10 голосов
/ 21 ноября 2011

Я пытаюсь сшить 2 изображения только для начала панографии. Я уже нашел ключевые точки, нашел гомографию с помощью RANSAC, но я не могу понять, как выровнять эти 2 изображения (я новичок в opencv). Теперь часть кода

vector<Point2f> points1, points2;
for( int i = 0; i < good_matches.size(); i++ )
{
    //-- Get the keypoints from the good matches
    points1.push_back( keypoints1[ good_matches[i].queryIdx ].pt );
    points2.push_back( keypoints2[ good_matches[i].trainIdx ].pt );
}

/* Find Homography */
Mat H = findHomography( Mat(points2), Mat(points1), CV_RANSAC );

/* warp the image */
warpPerspective(mImg2, warpImage2, H, Size(mImg2.cols*2, mImg2.rows*2), INTER_CUBIC);

и мне нужно сшить Mat mImg1, где загружено первое изображение, и Mat warpImage2, где находится деформированное второе изображение. Можете ли вы показать мне, как это сделать? Мне также разрешили искаженное изображение, и я знаю, что должен изменить матрицу гомографии, но сейчас мне нужно выровнять эти два изображения. Спасибо за помощь.

Редактировать: С помощью Мартина Беккета я добавил этот код

//Point a cv::Mat header at it (no allocation is done)
Mat final(Size(mImg2.cols*2 + mImg1.cols, mImg2.rows*2),CV_8UC3);

//velikost img1
Mat roi1(final, Rect(0, 0,  mImg1.cols, mImg1.rows));
Mat roi2(final, Rect(0, 0, warpImage2.cols, warpImage2.rows));
warpImage2.copyTo(roi2);
mImg1.copyTo(roi1);
imshow("final", final);

и теперь работает

1 Ответ

8 голосов
/ 21 ноября 2011

Вы создаете новое увеличенное изображение правильного объединенного размера, затем создаете области интереса размера существующих изображений в тех местах, где вы хотите их получить в конечном изображении, и копируете существующие изображения в области интереса.

...