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

运行结果

相关推荐
carpell1 分钟前
【语义分割专栏】:FCN原理篇
人工智能·深度学习·计算机视觉·语义分割
满怀10151 小时前
【生成式AI文本生成实战】从GPT原理到企业级应用开发
人工智能·gpt
微刻时光1 小时前
影刀处理 Excel:智能工具带来的高效变革
人工智能·python·低代码·自动化·excel·rpa·影刀rpa
聚客AI3 小时前
ChatGPT到Claude全适配:跨模型Prompt高级设计规范与迁移技巧
人工智能·机器学习·语言模型·自然语言处理·langchain·transformer·llama
小羊Linux客栈4 小时前
自动化:批量文件重命名
运维·人工智能·python·自动化·游戏程序
Mr数据杨8 小时前
【Dv3Admin】插件 dv3admin_chatgpt 集成大语言模型智能模块
人工智能·语言模型·chatgpt
zm-v-159304339868 小时前
AI 赋能 Copula 建模:大语言模型驱动的相关性分析革新
人工智能·语言模型·自然语言处理
zhz52149 小时前
AI数字人融合VR全景:从技术突破到可信场景落地
人工智能·vr·ai编程·ai数字人·ai agent·智能体
数据与人工智能律师9 小时前
虚拟主播肖像权保护,数字时代的法律博弈
大数据·网络·人工智能·算法·区块链
武科大许志伟10 小时前
武汉科技大学人工智能与演化计算实验室许志伟课题组参加2025中国膜计算论坛
人工智能·科技