一致するものが見つかったら、このコードを使用して線を引きます。
(...some code...)
//draw good matches
for( int i = 0; i < (int)good_matches.size(); i++ )
{
printf( "-- Good Match [%d] Keypoint 1: %d -- Keypoint 2: %d \n", i, good_matches[i].queryIdx, good_matches[i].trainIdx );
//query image is the first frame
Point2f point_old = keypoints_1[good_matches[i].queryIdx].pt;
//train image is the next frame that we want to find matched keypoints
Point2f point_new = keypoints_2[good_matches[i].trainIdx].pt;
//keypoint color for frame 1: RED
circle(img_1, point_old, 3, Scalar(0, 0, 255), 1);
circle(img_2, point_old, 3, Scalar(0, 0, 255), 1);
//keypoint color for frame 2: BLUE
circle(img_1, point_new, 3, Scalar(255, 0, 0), 1);
circle(img_2, point_new, 3, Scalar(255, 0, 0), 1);
//draw a line between keypoints
line(img_1, point_old, point_new, Scalar(0, 255, 0), 2, 8, 0);
line(img_2, point_old, point_new, Scalar(0, 255, 0), 2, 8, 0);
}
imwrite("directory/image1.jpg",img_1);
imwrite("directory/image2.jpg",img_2);
(...some code...)
結果を最初のフレーム (img_1) と次のフレーム (img_2) に保存しました。ご覧のとおり、結果は異なりますが、線の形は同じです。OpenCV のビデオ ホモグラフィ サンプルでは、キーポイント トラッキングは正確なようです。キーポイントの検出 -> キーポイントの計算 -> キーポイントのワープ -> 一致 -> ホモグラフィの検索 -> 一致の描画というアプローチに従います。ただし、detect keypoints-->compute keypoints-->match-->draw matchesを適用します。キーポイントの動きを正確に見るために、ホモグラフィとパースペクティブ (またはその他のこと) を考慮する必要がある場合、私は混乱します。
最初のフレームの結果 (img_1)

そして次のフレーム (img_2)
