Shi-Tomasi(也称为Good Features to Track)角点检测算法是一种改进的角点检测方法,它基于Harris角点检测算法,并针对一些不足进行了改进。
与Harris角点检测不同,Shi-Tomasi使用了更简化的角点响应函数。它选择了自相关矩阵M的较小特征值λmin作为评价角点的依据:

角点响应函数即为较小特征值。
角点判断如图所示:

void cv::goodFeaturesToTrack ( InputArray image,
OutputArray corners,
int maxCorners,
double qualityLevel,
double minDistance,
InputArray mask = noArray(),
int blockSize = 3,
bool useHarrisDetector =false,
double k = 0.04
)
- void Tomas_f(Mat mat){
- Mat gray;
- cvtColor(mat,gray,COLOR_BGR2GRAY);
- //提取角点
- int maxCorners=100;//检测角点数目
- double quality_level=0.01;//质量等级
- double minDistance=0.04;//两个角点之间的最小欧式距离
- vector<Point2f> corners;
- goodFeaturesToTrack(gray,corners,maxCorners,quality_level,minDistance,Mat(),3, false);
- //绘制角点
- vector<KeyPoint> keyPoints;//存放角点的KeyPoint类,用于后期绘制角点时使用
- for(int i=0;i<corners.size();i++){
- //将角点存放在KeyPoint类中
- KeyPoint keyPoint;
- keyPoint.pt=corners[i];
- keyPoints.push_back(keyPoint);
- }
- //用drwaKeyPoints()函数绘制角点坐标
- drawKeypoints(mat,keyPoints,mat);
- imwrite("/sdcard/DCIM/mat.png",mat);
- }