J.Shi和C.Tomasi在1994年在其论文“Good Features to Track”中,提出了一种对Harris角点检测算子的改进算法——Shi-Tomasi角点检测算子,可以看到,Opencv中函数goodFeaturesToTrack就是直接取自他们论文的名字。

goodFeaturesToTrack有比cornerHarris更多的控制参数,函数原型:

void goodFeaturesToTrack( InputArray image, OutputArray corners,
int maxCorners, double qualityLevel, double minDistance,
InputArray mask=noArray(), int blockSize=3,
bool useHarrisDetector=false, double k=0.04 );

第一个参数image:8位或32位单通道灰度图像;

第二个参数corners:位置点向量,保存的是检测到的角点的坐标;

第三个参数maxCorners:定义可以检测到的角点的数量的最大值;

第四个参数qualityLevel:检测到的角点的质量等级,角点特征值小于qualityLevel*最大特征值的点将被舍弃;

第五个参数minDistance:两个角点间最小间距,以像素为单位;

第六个参数mask:指定检测区域,若检测整幅图像,mask置为空Mat();

第七个参数blockSize:计算协方差矩阵时窗口大小;

第八个参数useHarrisDetector:是否使用Harris角点检测,为false,则使用Shi-Tomasi算子;

第九个参数k:留给Harris角点检测算子用的中间参数,一般取经验值0.04~0.06。第八个参数为false时,该参数不起作用;

goodFeaturesToTrack检测Shi-Tomasi角点简单demo:

#include "core/core.hpp"
#include "highgui/highgui.hpp"
#include "imgproc/imgproc.hpp" using namespace cv; Mat image;
Mat imageGray;
int thresh=5; //角点个数控制
int MaxThresh=255; void Trackbar(int,void*); int main(int argc,char*argv[])
{
image=imread(argv[1]);
cvtColor(image,imageGray,CV_RGB2GRAY);
GaussianBlur(imageGray,imageGray,Size(5,5),1); // 滤波
namedWindow("Corner Detected");
createTrackbar("threshold:","Corner Detected",&thresh,MaxThresh,Trackbar);
imshow("Corner Detected",image);
Trackbar(0,0);
waitKey();
return 0;
} void Trackbar(int,void*)
{
Mat dst,imageSource;
dst=Mat::zeros(image.size(),CV_32FC1);
imageSource=image.clone();
vector<Point2f> corners;
goodFeaturesToTrack(imageGray,corners,thresh,0.01,10,Mat());
for(int i=0;i<corners.size();i++)
{
circle(imageSource,corners[i],2,Scalar(0,0,255),2);
}
imshow("Corner Detected",imageSource);
}

goodFeaturesToTrack相比cornerHarris,增加了检测的复杂度,同时也可以更好的控制检测到的角点的特性,比如角点个数,角点间最小间距等。设置检测点数为11时,只有特征值最大的前11个角点被检测出来:

继续增大检测点数的值,所有角点都被检测出来:

最新文章

  1. windows7内核驱动开发试验环境配置
  2. [转]大白话系列之C#委托与事件讲解(三)
  3. 【分布式协调器】Paxos的工程实现-cocklebur简介(一)
  4. 报错:&#39;Could not load NIB in bundle: &#39;NSBundle解决办法
  5. Unity3D 文字滚动跑马灯效果
  6. 项目笔记---Windows Service调用Windows API问题
  7. aspxgridView,Repeater增加自动序号列
  8. [四]SpringMvc学习-对servlet与json的支持与实现
  9. [Openstack][Grizzly] Mysql删除僵尸实例
  10. 瑞柏匡丞_免费app开发是否可行
  11. Spring Framework 下载链接_现在有空
  12. Flex timer使用 keydown事件注册到stage
  13. PostgreSQL:安装及中文显示
  14. python验证码简单识别
  15. IIS 支持 m3u8
  16. 用Python实现简单通讯录
  17. [IDEA]IDEA设置注释模板
  18. Linux使用mailx发送邮件--技术流ken
  19. 停靠窗口QDockWidget
  20. Confluence 6 自定义空间布局

热门文章

  1. ConcurrentHashMap实现原理--转载
  2. 洛谷 P3386 【模板】二分图匹配 Dinic版
  3. weblogic安装(无界面静默安装)
  4. PYTHON学习第五天课后总结:
  5. sql server向表里添加字段
  6. IntelliJ IDEA 2018 Community(社区版)创建J2EE项目+Tomcat9部署
  7. ED/EP系列1《简单介绍》
  8. JS学习笔记 - fgm练习 - 限制输入框的字符类型 正则 和 || 或运算符的运用 i++和++i
  9. 《TCP/IP具体解释卷2:实现》笔记--协议控制块
  10. datagridview合并相同单元格