1
Shi-Tomasi corner detector {#tutorial_good_features_to_track}
2
==========================
7
In this tutorial you will learn how to:
9
- Use the function @ref cv::goodFeaturesToTrack to detect corners using the Shi-Tomasi method.
17
This tutorial code's is shown lines below. You can also download it from
18
[here](https://github.com/Itseez/opencv/tree/master/samples/cpp/tutorial_code/TrackingMotion/goodFeaturesToTrack_Demo.cpp)
20
#include "opencv2/highgui.hpp"
21
#include "opencv2/imgproc.hpp"
33
int maxTrackbar = 100;
36
char* source_window = "Image";
39
void goodFeaturesToTrack_Demo( int, void* );
44
int main( int argc, char** argv )
46
/// Load source image and convert it to gray
47
src = imread( argv[1], 1 );
48
cvtColor( src, src_gray, COLOR_BGR2GRAY );
51
namedWindow( source_window, WINDOW_AUTOSIZE );
53
/// Create Trackbar to set the number of corners
54
createTrackbar( "Max corners:", source_window, &maxCorners, maxTrackbar, goodFeaturesToTrack_Demo );
56
imshow( source_window, src );
58
goodFeaturesToTrack_Demo( 0, 0 );
65
* @function goodFeaturesToTrack_Demo.cpp
66
* @brief Apply Shi-Tomasi corner detector
68
void goodFeaturesToTrack_Demo( int, void* )
70
if( maxCorners < 1 ) { maxCorners = 1; }
72
/// Parameters for Shi-Tomasi algorithm
73
vector<Point2f> corners;
74
double qualityLevel = 0.01;
75
double minDistance = 10;
77
bool useHarrisDetector = false;
80
/// Copy the source image
84
/// Apply corner detection
85
goodFeaturesToTrack( src_gray,
96
/// Draw corners detected
97
cout<<"** Number of corners detected: "<<corners.size()<<endl;
99
for( size_t i = 0; i < corners.size(); i++ )
100
{ circle( copy, corners[i], r, Scalar(rng.uniform(0,255), rng.uniform(0,255),
101
rng.uniform(0,255)), -1, 8, 0 ); }
103
/// Show what you got
104
namedWindow( source_window, WINDOW_AUTOSIZE );
105
imshow( source_window, copy );
114
![](images/Feature_Detection_Result_a.jpg)