OpenCV --Shi-Tomasi角点检测算法
Shi-Tomasi算子是1994年在文章《good Features To Track》中被提出的,opencv实现此算法的函数就被命名为goodFeaturesToTrack。
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | //Shi-Tomasi算子 cv::Mat BasicAlgorithm::on_Shi_Tomasi(cv::Mat mat, int value) { Mat g_srcImage, g_grayImage; g_srcImage = mat; int g_maxCornerNumber = value; int g_maxTrackbarNumber = 500; RNG g_rng(12345); //初始化随机数生成器 cvtColor( g_srcImage, g_grayImage, COLOR_BGR2GRAY ); //【1】对变量小于等于1时的处理 if ( g_maxCornerNumber <= 1 ) { g_maxCornerNumber = 1; } //【2】Shi-Tomasi算法(goodFeaturesToTrack函数)的参数准备 vector<Point2f> corners; double qualityLevel = 0.01; //角点检测可接受的最小特征值 double minDistance = 10; //角点之间的最小距离 int blockSize = 3; //计算导数自相关矩阵时指定的邻域范围 double k = 0.04; //权重系数 Mat copy = g_srcImage.clone(); //复制源图像到一个临时变量中,作为感兴趣区域 //【3】进行Shi-Tomasi角点检测 goodFeaturesToTrack( g_grayImage, //输入图像 corners, //检测到的角点的输出向量 g_maxCornerNumber, //角点的最大数量 qualityLevel, //角点检测可接受的最小特征值 minDistance, //角点之间的最小距离 Mat(), //感兴趣区域 blockSize, //计算导数自相关矩阵时指定的邻域范围 false , //不使用Harris角点检测 k ); //权重系数 //【4】绘制检测到的角点 int r = 4; for ( int i = 0; i < corners.size(); i++ ) { //以随机的颜色绘制出角点 circle( copy, corners[i], r, Scalar(g_rng.uniform(0,255), g_rng.uniform(0,255), g_rng.uniform(0,255)), -1, 8, 0 ); // circle( copy, corners[i], r, Scalar(255, 0, 0), -1, 8, 0 ); //opencv中图像通道为BGR,(255,0,0)为蓝色,绘制出为蓝色点 } return copy; } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!