OpenCV (2.43) の ORB を使用して機能を追跡するプログラムを作成してい ます。このチュートリアルに従い、 hereのアドバイスを使用しました。
私の目標は、ビデオ フィード (顔) でオブジェクトを追跡し、その周りに四角形を描くことです。
私のプログラムはキーポイントを見つけて正しく一致させますが、findHomography
+perspectiveTransform
を使用して画像の新しいコーナーを見つけようとすると、通常、意味のない型の値が返されます (正しいホモグラフィが返されることもあります)。
ここに例の写真があります:
対応する問題のある部分は次のとおりです。
Mat H = findHomography( obj, scene, CV_RANSAC );
//-- Get the corners from the image_1 ( the object to be "detected" )
std::vector<Point2f> obj_corners(4);
obj_corners[0] = cvPoint(0,0); obj_corners[1] = cvPoint( img_object.cols, 0 );
obj_corners[2] = cvPoint( img_object.cols, img_object.rows ); obj_corners[3] = cvPoint( 0, img_object.rows );
std::vector<Point2f> scene_corners(4);
perspectiveTransform( obj_corners, scene_corners, H);
//-- Draw lines between the corners (the mapped object in the scene - image_2 )
line( img_matches, scene_corners[0] + Point2f( img_object.cols, 0), scene_corners[1] + Point2f( img_object.cols, 0), Scalar(0, 255, 0), 4 );
line( img_matches, scene_corners[1] + Point2f( img_object.cols, 0), scene_corners[2] + Point2f( img_object.cols, 0), Scalar( 0, 255, 0), 4 );
line( img_matches, scene_corners[2] + Point2f( img_object.cols, 0), scene_corners[3] + Point2f( img_object.cols, 0), Scalar( 0, 255, 0), 4 );
line( img_matches, scene_corners[3] + Point2f( img_object.cols, 0), scene_corners[0] + Point2f( img_object.cols, 0), Scalar( 0, 255, 0), 4 );
コードの残りの部分は、私が提供したリンクと実質的に同じです。描かれた線は完全にランダムに見えます。私の目標は、新しいシーンでソース オブジェクトの最小限の長方形を取得することだけです。
追跡するPSソース画像は、ビデオ入力からコピーされ、その入力からの新しい画像で追跡される領域です。それは重要ですか?