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;
}

运行结果

相关推荐
海宇大数据1 分钟前
零信任架构实战:基于海宇全能小微企业报告构建自动化持牌网络小贷小微商户极速助业贷秒级全维风险决策网关
网络·人工智能·架构·自动化
hkNaruto15 分钟前
【AI】基于大模型的AI游戏地图生成、控制方案:AI Native Game Harness 迁移操作手册
前端·人工智能·游戏
IT_陈寒25 分钟前
Java序列化踩坑记:对象循环引用让我加班两小时
前端·人工智能·后端
ZhengEnCi28 分钟前
同样的模型,为什么本地和云 API 差别那么大:量化精度、聊天模板与采样参数的三大元凶
人工智能·算法·llm
vilya34 分钟前
Agent 语音引擎换心记:从「够用」到「稳且好」
人工智能·agent
王中阳Go35 分钟前
5.27 分钟干完后端和全部测试:一场三小时笔试的五个失分点,四个不在代码上
大数据·数据库·人工智能·后端·大语言模型
70后写java的老码农36 分钟前
Ollama 大模型私有化部署与彻底卸载指南(Windows/Linux)
人工智能
清如许.40 分钟前
如何评估 AI 智能体(AI Agent)?指标、方法与最佳实践
人工智能
猪八宅百炼成仙40 分钟前
让 AI 帮你清理电脑而不翻车:一个 Windows 体检调优 Skill 的工程化设计
人工智能·windows
宋艳_AI应用开发42 分钟前
五个阶段跑完,它交了一份日期错两年的投资报告——深思熟虑的Agent最危险的地方,是想得太像
人工智能