OpenCV使用goodFeaturesToTrack實現角點檢測
阿新 • • 發佈:2022-03-13
一、概述
案例:使用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);
三、演示圖片