OpenCV使用goodFeaturesToTrack實現角點檢測


一、概述

  案例:使用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.繪制角點並顯示圖像  

二、代碼示例

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

 

三、演示圖片

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM