Shi-Tomasi角点检测

  Shi-Tomasi角点检测原理与Harris角点检测相同,只是在最后判别式的选取上不同Shi-Tomasi角点检测选取特征中的最小的那个来判别。${\rm{R = }}\min ({\lambda _1},{\lambda _2})$,下面是其Shi-Tomasi角点检测结果。Shi-Tomasi角点检测_第1张图片

  • Shi-Tomasi角点检测函数参数解释
 1 goodFeaturesToTrack(
 2 InputArray image,//输入图像,8位或浮点数32位
 3 OutputArray corners,//检测到的角点向量
 4 Int maxCorners,//角点的最大数量
 5 Double qualityLevel,//可接受的最小特征值
 6 Double minDistance,//角点之间的最小距离
 7 InputArray mask,//感兴趣区域,一般默认无Mat()
 8 Int blockSize,//自相关矩阵指定的领域范围
 9 Bool useHarris,//是否使用Harris角点检测,1使用,0不使用
10 Double k,//自相关矩阵权重系数);
 1 #include
 2 #include
 3 
 4 using namespace std;
 5 using namespace cv;
 6 int init_value=50, max_value=555;
 7 Mat src,gray,dst;
 8 void shi_tomasi(int, void*);
 9 int main(int argc, char** argv)
10 {
11     
12     src = imread("H:/cv_code/image/home.jpg");
13     if (src.empty())
14     {
15         printf("could not find image");
16         return -1;
17     }
18     namedWindow("input");
19     imshow("input",src);
20     cvtColor(src,gray,COLOR_BGR2GRAY);
21     namedWindow("result");
22     createTrackbar("value:","result",&init_value,max_value,shi_tomasi);
23     shi_tomasi(0,0);
24     waitKey(0);
25     return 0;
26 }
27 
28 void shi_tomasi(int, void*)
29 {
30     if (init_value <= 1)
31         init_value = 1;
32     vector corners;
33     goodFeaturesToTrack(gray,corners,init_value,0.01,10,Mat(),3,false,0.04);
34     dst = src.clone();
35     int r = 4;
36     for (int i = 0; i < corners.size(); i++)
37     {
38         circle(dst,corners[i],3,Scalar(0,0,255),-1,8,0);
39     }
40     imshow("result",dst);
41 }

 

 

你可能感兴趣的:(Shi-Tomasi角点检测)