features2d フレームワークで異なる検出器を使用して、2 つの連続した特徴点を取得しました。
最初のフレームでは、特徴点が赤でプロットされます

次のフレームでは、特徴点が青色でプロットされます

最初のフレーム(赤い点のある画像 )内のこれらの赤と青の(一致した)点の間に線を引きたいと思います。opencvの drawmatches関数は、マッチングのために 2 つの連続するフレームが隣り合ったウィンドウを表示するため、役に立ちません。OpenCVで可能ですか?
前もって感謝します
features2d フレームワークで異なる検出器を使用して、2 つの連続した特徴点を取得しました。
最初のフレームでは、特徴点が赤でプロットされます

次のフレームでは、特徴点が青色でプロットされます

最初のフレーム(赤い点のある画像 )内のこれらの赤と青の(一致した)点の間に線を引きたいと思います。opencvの drawmatches関数は、マッチングのために 2 つの連続するフレームが隣り合ったウィンドウを表示するため、役に立ちません。OpenCVで可能ですか?
前もって感謝します
各キーポイントが 2 つのフレーム間でどのように移動するかを視覚化する必要があると思います。私の知る限り、OpenCV には要件を満たす組み込み関数はありません。
ただし、drawMatches()関数を呼び出したので、既に 2 つのキーポイント セット (例として C++ コードを取り上げます)vector<KeyPoint>& keypoints1, keypoints2とmatch がありvector<DMatch>& matches1to2ます。Point keypoints1.pt次に、関数を呼び出して、各キーポイントのピクセル座標を取得し、キーポイント間に線を引くことができline()ます。
最初のフレームに描画したいのでkeypoints2、ピクセル座標が のサイズを超える可能性があることに注意してくださいimg1。
キーポイントの動きをすばやく把握する方法があります。以下は、imshowpair()Matlab で表示される結果です。

一致するものが見つかったら、このコードを使用して線を引きます。
(...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)
