优秀的编程知识分享平台

网站首页 > 技术文章 正文

OpenCV使用goodFeaturesToTrack实现角点检测

nanyue 2024-08-11 20:43:04 技术文章 8 ℃

1、概述

  案例:使用goodFeaturesToTrack实现角点检测

  特点:goodFeaturesToTrack的检测速度比cornerHarris角点检测的速度更加快速,且API的使用更加方便

goodFeaturesToTrack(src,corners,maxCorners,quality_level,min_distance,Mat(),block_size,use_harris,k);
1.src:输入图像,输入的图像必须是8位或32位单通道图像
2.corners:输出的角点使用vector<Point2f>存储
3.maxCorners:最大角点数目,也就是corners集合中能存放的最大交点数,也就是最强的前corners个角点
4.quality_level:质量水平系数,是0.01~1之间的系数,其中系数越大检测到的角点就越少,反之亦然
5.min_distance:角点之间的最小距离,小于此距离的角点会被忽略,距离越大有可能检测到的角点就越少
6.Mat()掩码,mask=0忽略,基础用法忽略即可
7.block_size:Sobel算子,使用的邻域,四邻域,八邻域等 3,5,7
9.user_harris:是否使用harris检测,true是,false否
10.k:harris角点检测时使用一般为0.04,user_harris=false时此参数会被忽略

  角点检测步骤:

    1.加载原图

    2.图像灰度化

    3.执行角点检测

    4.绘制角点并显示图像  

2、代码示例

 updateParams(min_distanceEidt->text().toDouble(),block_sizeEdit->text().toInt());
    src = imread(filePath.toStdString().c_str());//加载原图
    if(src.empty()){
        qDebug()<<"Error file is empty";
        return;
    }
//    imshow("src",src);
    cvtColor(src,gray,COLOR_BGR2GRAY);//转为灰度图
//    imshow("gray",gray);
    //执行角点检测
    vector<Point2f> corners;//检测出的角点
    goodFeaturesToTrack(gray,corners,maxCorners,quality_level,min_distance,Mat(),block_size,use_harris,k);
    //将角点绘制出来
    for(size_t t = 0;t<corners.size();t++){
        circle(src,corners[t],3,Scalar(0,0,255),1,LINE_8);
    }
    QImage image = ImageUtils::matToQImage(src);
    QPixmap pixmap = QPixmap::fromImage(image);
    QGraphicsPixmapItem *item = new QGraphicsPixmapItem(pixmap.scaled(this->size(),Qt::KeepAspectRatio,Qt::SmoothTransformation));
    scene.addItem(item);

3、演示图片

Tags:

最近发表
标签列表