mirror of
https://github.com/opencv/opencv_contrib.git
synced 2025-10-19 02:16:34 +08:00
Added tracking module
Modified Copyrights Moved plantuml source files under doc disabled tests Added include of precomp.hpp
This commit is contained in:
148
modules/tracking/samples/tracker.cpp
Normal file
148
modules/tracking/samples/tracker.cpp
Normal file
@@ -0,0 +1,148 @@
|
||||
#include <opencv2/core/utility.hpp>
|
||||
#include <opencv2/tracking.hpp>
|
||||
#include <opencv2/highgui.hpp>
|
||||
#include <iostream>
|
||||
|
||||
using namespace std;
|
||||
using namespace cv;
|
||||
|
||||
static Mat image;
|
||||
static Rect boundingBox;
|
||||
static bool paused;
|
||||
static bool selectObject = false;
|
||||
static bool startSelection = false;
|
||||
|
||||
static const char* keys =
|
||||
{ "{@tracker_algorithm | | tracker algorithm }"
|
||||
"{@video_name | | video name }" };
|
||||
|
||||
static void help()
|
||||
{
|
||||
cout << "\nThis example shows the functionality of \"Long-term optical tracking API\""
|
||||
"-- pause video [p] and draw a bounding box around the target to start the tracker\n"
|
||||
"Call:\n"
|
||||
"./tracker <tracker_algorithm> <video_name>\n"
|
||||
<< endl;
|
||||
|
||||
cout << "\n\nHot keys: \n"
|
||||
"\tq - quit the program\n"
|
||||
"\tp - pause video\n";
|
||||
}
|
||||
|
||||
static void onMouse( int event, int x, int y, int, void* )
|
||||
{
|
||||
if( !selectObject )
|
||||
{
|
||||
switch ( event )
|
||||
{
|
||||
case EVENT_LBUTTONDOWN:
|
||||
//set origin of the bounding box
|
||||
startSelection = true;
|
||||
boundingBox.x = x;
|
||||
boundingBox.y = y;
|
||||
break;
|
||||
case EVENT_LBUTTONUP:
|
||||
//sei with and height of the bounding box
|
||||
boundingBox.width = std::abs( x - boundingBox.x );
|
||||
boundingBox.height = std::abs( y - boundingBox.y );
|
||||
paused = false;
|
||||
selectObject = true;
|
||||
break;
|
||||
case EVENT_MOUSEMOVE:
|
||||
|
||||
if( startSelection && !selectObject )
|
||||
{
|
||||
//draw the bounding box
|
||||
Mat currentFrame;
|
||||
image.copyTo( currentFrame );
|
||||
rectangle( currentFrame, Point( boundingBox.x, boundingBox.y ), Point( x, y ), Scalar( 255, 0, 0 ), 2, 1 );
|
||||
imshow( "Tracking API", currentFrame );
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int main( int argc, char** argv )
|
||||
{
|
||||
CommandLineParser parser( argc, argv, keys );
|
||||
|
||||
String tracker_algorithm = parser.get<String>( 0 );
|
||||
String video_name = parser.get<String>( 1 );
|
||||
|
||||
if( tracker_algorithm.empty() || video_name.empty() )
|
||||
{
|
||||
help();
|
||||
return -1;
|
||||
}
|
||||
|
||||
//open the capture
|
||||
VideoCapture cap;
|
||||
cap.open( video_name );
|
||||
|
||||
if( !cap.isOpened() )
|
||||
{
|
||||
help();
|
||||
cout << "***Could not initialize capturing...***\n";
|
||||
cout << "Current parameter's value: \n";
|
||||
parser.printMessage();
|
||||
return -1;
|
||||
}
|
||||
|
||||
Mat frame;
|
||||
paused = true;
|
||||
namedWindow( "Tracking API", 1 );
|
||||
setMouseCallback( "Tracking API", onMouse, 0 );
|
||||
|
||||
//instantiates the specific Tracker
|
||||
Ptr<Tracker> tracker = Tracker::create( tracker_algorithm );
|
||||
if( tracker == NULL )
|
||||
{
|
||||
cout << "***Error in the instantiation of the tracker...***\n";
|
||||
return -1;
|
||||
}
|
||||
|
||||
//get the first frame
|
||||
cap >> frame;
|
||||
frame.copyTo( image );
|
||||
imshow( "Tracking API", image );
|
||||
|
||||
bool initialized = false;
|
||||
for ( ;; )
|
||||
{
|
||||
if( !paused )
|
||||
{
|
||||
cap >> frame;
|
||||
frame.copyTo( image );
|
||||
|
||||
if( !initialized && selectObject )
|
||||
{
|
||||
//initializes the tracker
|
||||
if( !tracker->init( frame, boundingBox ) )
|
||||
{
|
||||
cout << "***Could not initialize tracker...***\n";
|
||||
return -1;
|
||||
}
|
||||
initialized = true;
|
||||
}
|
||||
else if( initialized )
|
||||
{
|
||||
//updates the tracker
|
||||
if( tracker->update( frame, boundingBox ) )
|
||||
{
|
||||
rectangle( image, boundingBox, Scalar( 255, 0, 0 ), 2, 1 );
|
||||
}
|
||||
}
|
||||
imshow( "Tracking API", image );
|
||||
}
|
||||
|
||||
char c = (char) waitKey( 2 );
|
||||
if( c == 'q' )
|
||||
break;
|
||||
if( c == 'p' )
|
||||
paused = !paused;
|
||||
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
Reference in New Issue
Block a user