OpenCV 图形API(62)特征检测-----在图像中查找最显著的角点函数goodFeaturesToTrack()

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

确定图像上的强角点。

该函数在图像或指定的图像区域内找到最显著的角点,如文献[240]中所述。

  • 函数使用 cornerMinEigenVal 或 cornerHarris 在每个源图像像素上计算角点质量测量值。
  • 函数执行非极大值抑制(保留3x3邻域内的局部最大值)。
  • 最小特征值小于 qualityLevel⋅maxx,yqualityMeasureMap(x,y) 的角点将被拒绝。
  • 剩余的角点按照质量测量值从大到小排序。
  • 函数会丢弃每一个在其距离小于 maxDistance 范围内存在更强角点的角点。

该函数可以用于初始化基于点的对象跟踪器。

注意

如果以不同的 qualityLevel 参数值 A 和 B 调用该函数,并且 A > B,则返回的带有 qualityLevel=A 的角点向量将是带有 qualityLevel=B 的输出向量的前缀。

函数的文字ID是 "org.opencv.imgproc.feature.goodFeaturesToTrack"。

函数原型

cpp 复制代码
GArray<Point2f> cv::gapi::goodFeaturesToTrack 
(
 	const GMat &  	image,
	int  	maxCorners,
	double  	qualityLevel,
	double  	minDistance,
	const Mat &  	mask = Mat(),
	int  	blockSize = 3,
	bool  	useHarrisDetector = false,
	double  	k = 0.04 
) 		

参数

  • 参数 image:输入8位或浮点32位、单通道图像。 - 参数 maxCorners:要返回的最大角点数量。如果找到的角点多于 maxCorners,将返回最强的那些。maxCorners <= 0 表示对最大数量没有限制,并返回所有检测到的角点。
  • 参数 qualityLevel:表征接受的最小图像角点质量的参数。参数值乘以最佳角点质量测量值,即最小特征值(见 cornerMinEigenVal)或 Harris 函数响应(见 cornerHarris)。质量测量值低于此乘积的角点将被拒绝。例如,如果最佳角点的质量测量值为1500,qualityLevel=0.01,则所有质量测量值小于15的角点都将被拒绝。
  • 参数 minDistance:返回角点之间的最小可能欧几里得距离。
  • 参数 mask:可选的兴趣区域。如果图像不为空(需要类型为 CV_8UC1 并且与 image 大小相同),则指定检测角点的区域。
  • 参数 blockSize:计算每个像素邻域导数协方差矩阵的平均块大小。参见 cornerEigenValsAndVecs。
  • 参数 useHarrisDetector:指示是否使用 Harris 检测器(见 cornerHarris)或 cornerMinEigenVal 的参数。
  • 参数 k:Harris 检测器的自由参数。

返回值

检测到的角点向量。

代码示例

cpp 复制代码
#include <opencv2/gapi.hpp>
#include <opencv2/gapi/core.hpp>
#include <opencv2/gapi/imgproc.hpp>
#include <opencv2/opencv.hpp>

using namespace cv;
using namespace cv::gapi;

int main()
{
    // 读取输入图像,通常为灰度图像
    Mat src = imread( "/media/dingxin/data/study/OpenCV/sources/images/Lenna.png", IMREAD_GRAYSCALE );
    if ( src.empty() )
    {
        std::cerr << "无法读取图像" << std::endl;
        return -1;
    }

    // 定义G-API网络
    cv::GMat in;
    cv::GArray< cv::Point2f > kpts;
    kpts = gapi::goodFeaturesToTrack( in,
                                      100,     // maxCorners
                                      0.01,    // qualityLevel
                                      10,      // minDistance
                                      Mat(),   // mask
                                      3,       // blockSize
                                      false,   // useHarrisDetector
                                      0.04 );  // k

    // 创建并执行G-API图
    cv::GComputation comp( cv::GIn( in ), cv::GOut( kpts ) );
    std::vector< cv::Point2f > corners;
    comp.apply( gin( src ), gout( corners ) );

    // 在原图上绘制检测到的角点
    for ( const auto& point : corners )
    {
        circle( src, point, 5, Scalar( 0, 0, 255 ), FILLED );
    }

    // 显示结果
    imshow( "Good Features to Track", src );
    waitKey();

    return 0;
}

运行结果

相关推荐
yunfuuwqi4 小时前
OpenClaw✅真·喂饭级教程:2026年OpenClaw(原Moltbot)一键部署+接入飞书最佳实践
运维·服务器·网络·人工智能·飞书·京东云
九河云4 小时前
5秒开服,你的应用部署还卡在“加载中”吗?
大数据·人工智能·安全·机器学习·华为云
人工智能培训4 小时前
具身智能视觉、触觉、力觉、听觉等信息如何实时对齐与融合?
人工智能·深度学习·大模型·transformer·企业数字化转型·具身智能
wenzhangli74 小时前
能力中心 (Agent SkillCenter):开启AI技能管理新时代
人工智能
后端小肥肠5 小时前
别再盲目抽卡了!Seedance 2.0 成本太高?教你用 Claude Code 100% 出片
人工智能·aigc·agent
每日新鲜事5 小时前
热销复盘:招商林屿缦岛203套售罄背后的客户逻辑分析
大数据·人工智能
Coder_Boy_5 小时前
基于SpringAI的在线考试系统-考试系统开发流程案例
java·数据库·人工智能·spring boot·后端
挖坑的张师傅5 小时前
对 AI Native 架构的一些思考
人工智能
LinQingYanga6 小时前
极客时间多模态大模型训练营毕业总结(2026年2月8日)
人工智能
pccai-vip6 小时前
过去24小时AI创业趋势分析
人工智能