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”。

函数原型

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 检测器的自由参数。

返回值
检测到的角点向量。

代码示例

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

运行结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

村北头的码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值