.. _good_features_to_track: Shi-Tomasi角点检测子 ************************** 目标 ===== 在这个教程中我们将涉及: .. container:: enumeratevisibleitemswithsquare * 使用函数 :good_features_to_track:`goodFeaturesToTrack <>` 来调用Shi-Tomasi方法检测角点。 理论 ====== 代码 ==== 这个教程的代码如下所示。源代码还可以从 `这个链接下载得到 `_ .. code-block:: cpp #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #include #include #include using namespace cv; using namespace std; /// Global variables Mat src, src_gray; int maxCorners = 23; int maxTrackbar = 100; RNG rng(12345); char* source_window = "Image"; /// Function header void goodFeaturesToTrack_Demo( int, void* ); /** * @function main */ int main( int argc, char** argv ) { /// Load source image and convert it to gray src = imread( argv[1], 1 ); cvtColor( src, src_gray, CV_BGR2GRAY ); /// Create Window namedWindow( source_window, CV_WINDOW_AUTOSIZE ); /// Create Trackbar to set the number of corners createTrackbar( "Max corners:", source_window, &maxCorners, maxTrackbar, goodFeaturesToTrack_Demo ); imshow( source_window, src ); goodFeaturesToTrack_Demo( 0, 0 ); waitKey(0); return(0); } /** * @function goodFeaturesToTrack_Demo.cpp * @brief Apply Shi-Tomasi corner detector */ void goodFeaturesToTrack_Demo( int, void* ) { if( maxCorners < 1 ) { maxCorners = 1; } /// Parameters for Shi-Tomasi algorithm vector corners; double qualityLevel = 0.01; double minDistance = 10; int blockSize = 3; bool useHarrisDetector = false; double k = 0.04; /// Copy the source image Mat copy; copy = src.clone(); /// Apply corner detection goodFeaturesToTrack( src_gray, corners, maxCorners, qualityLevel, minDistance, Mat(), blockSize, useHarrisDetector, k ); /// Draw corners detected cout<<"** Number of corners detected: "<, http://www.cbsr.ia.ac.cn/users/szheng/