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 を作成する方法を教えていただけますか? そして、その空白領域を自動的に切り取るにはどうすればよいですか?