0

OpenCV 3.0 でステッチングを実行しようとしました。結果は良好ですが、右側に黒い空白の領域ができました。

for (int i = 0; i < best_matches.size(); i++)
{
    //-- Get the keypoints from the good matches  
    FirstImageMatchPT.push_back(keypoints1[best_matches[i].queryIdx].pt);
    SecondImageMatchPT.push_back(keypoints2[best_matches[i].trainIdx].pt);
}

vector<unsigned char> match_mask;
Mat MatchedImage = findHomography(SecondImageMatchPT, FirstImageMatchPT, CV_RANSAC);


cv::Mat result;
result = img_Right.clone();
warpPerspective(img_Right, result, MatchedImage, cv::Size(img_Left.cols + img_Right.cols, img_Left.rows));

cv::Mat half(result, cv::Rect(0, 0, img_Left.cols, img_Left.rows));
img_Left.copyTo(half);

左 右 結果

「findHomography」の最初の変数は 2 番目 (右の画像) の一致点で、2 番目の変数は最初の (左の画像) の一致点です。

変数を交換した理由は、以下のコードを実行すると、左の画像がトリミングされ、左の画像と右の画像の一致する領域のみが表示されたためです。(そして、より大きな空白領域があっても)

for (int i = 0; i < best_matches.size(); i++)
{
    //-- Get the keypoints from the good matches  
    FirstImageMatchPT.push_back(keypoints1[best_matches[i].queryIdx].pt);
    SecondImageMatchPT.push_back(keypoints2[best_matches[i].trainIdx].pt);
}

vector<unsigned char> match_mask;
Mat MatchedImage = findHomography(FirstImageMatchPT, SecondImageMatchPT, CV_RANSAC);


cv::Mat result;
result = img_Left.clone();
warpPerspective(img_Left, result, MatchedImage, cv::Size(img_Left.cols + img_Right.cols, img_Left.rows));


cv::Mat half(result, cv::Rect(0, 0, img_Right.cols, img_Right.rows));
img_Right.copyTo(half);

トリミングされた画像

このための適切な RoI を作成する方法を教えていただけますか? そして、その空白領域を自動的に切り取るにはどうすればよいですか?

4

1 に答える 1