OpenCV(四十三):Shi-Tomas角点检测

简介: OpenCV(四十三):Shi-Tomas角点检测

1.Shi-Tomas角点检测原理

      Shi-Tomasi(也称为Good Features to Track)角点检测算法是一种改进的角点检测方法,它基于Harris角点检测算法,并针对一些不足进行了改进。

      与Harris角点检测不同,Shi-Tomasi使用了更简化的角点响应函数。它选择了自相关矩阵M的较小特征值λmin作为评价角点的依据:

角点响应函数即为较小特征值。

角点判断如图所示:

  • 当λ1和λ2都小于λmin时,为平面区域
  • 当λ1和λ2都大于λmin时,为角点
  • 当λ1和λ2只有一个大于λmin时,为边缘区域

2.检测Shi-Tomas角点函数goodFeaturesToTrack()

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

)

  • corners:检测到角点的输出量
  • maxCorners:要寻找的角点数目。
  • qualityLevel: 角点阙值与最佳角点的关系,又称质量等级,当参数为0.01,表示角点阙值是最佳角点的0.01倍
  • minDistance:两个角点之间的最小欧式距离
  • mask:掩码矩阵,表示检测角点的区域。
  • blockSize:计算梯度协方差矩阵的尺寸。
  • useHarrisDetector:是否使用Harris角点
  • k:Haris检测角点过程中的常值权重系数

3.示例代码

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);
}
目录
相关文章
|
7月前
|
计算机视觉
OpenCV(三十八):二维码检测
OpenCV(三十八):二维码检测
238 0
|
7月前
|
编解码 计算机视觉
OpenCV(三十六):霍夫直线检测
OpenCV(三十六):霍夫直线检测
154 0
|
7月前
|
计算机视觉 索引
OpenCV(三十五):凸包检测
OpenCV(三十五):凸包检测
97 0
|
7月前
|
存储 资源调度 算法
Opencv(C++)系列学习---SIFT、SURF、ORB算子特征检测
Opencv(C++)系列学习---SIFT、SURF、ORB算子特征检测
405 0
|
2月前
|
计算机视觉
Opencv学习笔记(八):如何通过cv2读取视频和摄像头来进行人脸检测(jetson nano)
如何使用OpenCV库通过cv2模块读取视频和摄像头进行人脸检测,并提供了相应的代码示例。
129 1
|
2月前
|
机器学习/深度学习 计算机视觉
目标检测笔记(六):如何结合特定区域进行目标检测(基于OpenCV的人脸检测实例)
本文介绍了如何使用OpenCV进行特定区域的目标检测,包括人脸检测实例,展示了两种实现方法和相应的代码。
91 1
目标检测笔记(六):如何结合特定区域进行目标检测(基于OpenCV的人脸检测实例)
|
2月前
|
算法 计算机视觉 Python
圆形检测算法-基于颜色和形状(opencv)
该代码实现了一个圆检测算法,用于识别视频中的红色、白色和蓝色圆形。通过将图像从RGB转换为HSV颜色空间,并设置对应颜色的阈值范围,提取出目标颜色的区域。接着对这些区域进行轮廓提取和面积筛选,使用霍夫圆变换检测圆形,并在原图上绘制检测结果。
96 0
|
7月前
|
存储 算法 计算机视觉
OpenCV(四十二):Harris角点检测
OpenCV(四十二):Harris角点检测
110 0
|
5月前
|
机器学习/深度学习 传感器 算法
OpenCV4工业缺陷检测的六种方法
OpenCV4工业缺陷检测的六种方法
|
6月前
|
存储 编解码 算法
【Qt&OpenCV 检测图像中的线/圆/轮廓 HoughLinesP/HoughCircles/findContours&drawContours】
【Qt&OpenCV 检测图像中的线/圆/轮廓 HoughLinesP/HoughCircles/findContours&drawContours】
116 0