一、概述
案例:使用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);
三、演示圖片