OpenCV 5.0.0
Open Source Computer Vision
読み込み中...
検索中...
見つかりません
🤖 AIによる機械翻訳(非公式) — これは OpenCV 5.0.0 公式リファレンス(英語)を AI (Claude) で自動翻訳したものです。訳に誤りを含む場合があります。正確な情報は 公式英語版(原文) を参照してください。
OpenCV Tracker入門

目的

このチュートリアルでは、次のことを学ぶ

  • トラッカーオブジェクトを作成する。
  • roiSelector関数を使って、与えられた画像からROIを選択する。
  • 与えられた画像内の特定の領域を追跡する。

ソースコード

#include <iostream>
#include <cstring>
using namespace std;
using namespace cv;
int main( int argc, char** argv ){
// show help
if(argc<2){
cout<<
" Usage: tracker <video_name>\n"
" examples:\n"
" example_tracking_kcf Bolt/img/%04d.jpg\n"
" example_tracking_kcf faceocc2.webm\n"
<< endl;
return 0;
}
// declares all required variables
Rect roi;
Mat frame;
// create a tracker object
Ptr<Tracker> tracker = TrackerKCF::create();
// set input video
std::string video = argv[1];
VideoCapture cap(video);
// get bounding box
cap >> frame;
roi=selectROI("tracker",frame);
//quit if ROI was not selected
if(roi.width==0 || roi.height==0)
return 0;
// initialize the tracker
tracker->init(frame,roi);
// perform the tracking process
printf("Start the tracking process, press ESC to quit.\n");
for ( ;; ){
// get frame from the video
cap >> frame;
// stop the program if no more images
if(frame.rows==0 || frame.cols==0)
break;
// update the tracking result
tracker->update(frame,roi);
// draw the tracked object
rectangle( frame, roi, Scalar( 255, 0, 0 ), 2, 1 );
// show image with the tracked object
imshow("tracker",frame);
//quit on ESC button
if(waitKey(1)==27)break;
}
return 0;
}
Comma-separated Matrix Initializer.
Definition mat.hpp:964
Template class for 2D rectangles.
Definition types.hpp:447
_Tp width
width of the rectangle
Definition types.hpp:492
_Tp height
height of the rectangle
Definition types.hpp:493
Class for video capturing from video files, image sequences or cameras.
Definition videoio.hpp:790
std::shared_ptr< _Tp > Ptr
Definition cvstd_wrapper.hpp:23
int main(int argc, char *argv[])
Definition highgui_qt.cpp:3
Definition core.hpp:107
STL namespace.

解説

  1. 入力動画のセットアップ

    if(argc<2){
    cout<<
    " Usage: tracker <video_name>\n"
    " examples:\n"
    " example_tracking_kcf Bolt/img/%04d.jpg\n"
    " example_tracking_kcf faceocc2.webm\n"
    << endl;
    return 0;
    }

    このチュートリアルでは、プログラムの入力として動画か画像のリストかを選択できる。ヘルプに書かれているとおり、入力動画はプログラムの引数として指定する必要がある。画像リストを入力として使いたい場合は、画像リストはヘルプに示されているように番号がフォーマットされている必要がある。ヘルプにおいては、画像ファイルが4桁の番号で付番されることを意味する(例えばファイル名は0001.jpg、0002.jpgのようになる)。

    動画のサンプルは opencv_extra/testdata/cv/tracking にある https://github.com/opencv/opencv_extra/tree/master/testdata/cv/tracking

  2. 必要な変数の宣言

    追跡対象オブジェクトのバウンディングボックスを記録するためにroiが必要である。この変数に格納される値は、トラッカーオブジェクトによって更新される。

    Rect roi;
    Mat frame;

    frame変数は、入力動画または画像リストの各フレームの画像データを保持するために使う。

  3. トラッカーオブジェクトの作成

    Ptr<Tracker> tracker = TrackerKCF::create();

    使用できるトラッカーアルゴリズムには、少なくとも7種類ある:

    • MIL
    • BOOSTING
    • MEDIANFLOW
    • TLD
    • KCF
    • MOSSE

    各トラッカーアルゴリズムにはそれぞれ長所と短所があるので、より詳しい情報については cv::Tracker のドキュメントを参照すること。

  4. 追跡対象オブジェクトの選択

    roi=selectROI("tracker",frame);

    この関数を使うと、GUIで追跡対象オブジェクトのバウンディングボックスを選択できる。デフォルトの引数では、選択はボックスの中心から開始され、中央に十字が表示される。

  5. トラッカーオブジェクトの初期化

    tracker->init(frame,roi);

    どのトラッカーアルゴリズムも、与えられた画像データと、追跡対象オブジェクトの初期バウンディングボックスで初期化する必要がある。初期化処理の失敗を避けるため、バウンディングボックスが有効であること(サイズがゼロより大きいこと)を確認すること。

  6. 更新

    tracker->update(frame,roi);

    この更新関数は追跡処理を実行し、結果をroi変数に渡す。