1. 程式人生 > 其它 >OpenCV使用goodFeaturesToTrack實現角點檢測

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

 

三、演示圖片