opencv3 C++ SIFT,SURF特征檢測函數用法


  因為對opencv還不夠熟練,所以在調試的時候浪費了很多時間,網上找的代碼也時各種版本參雜,試了好久老是報錯,

在這里自己記錄一下。

  我在ubuntu1804下進行,opencv版本是3.4.10及對應的contrib。測試主要有三個文件,png圖片一張,cpp文件一個以及一個CMakeLists.txt。

 

CMakeLists.txt如下:

 1 cmake_minimum_required(VERSION 2.8)
 2 
 3 set(CMAKE_BUILD_TYPE "Release")
 4 # 添加c++ 11標准支持
 5 set(CMAKE_CXX_FLAGS "-std=c++11 -O2")
 6 
 7 # 尋找OpenCV庫
 8 find_package(OpenCV REQUIRED)
 9 # 添加頭文件
10 include_directories(${OpenCV_INCLUDE_DIRS})
11 
12 add_executable(ttt ttt.cpp)
13 target_link_libraries(ttt ${OpenCV_LIBS})

ttt.cpp文件如下:

  #include <vector>
  #include <opencv2/opencv.hpp>
  #include <opencv2/xfeatures2d.hpp>
  
  
 using namespace std;
  using namespace cv;
  
 int main(int argc, char** argv) {
     
     cv::Mat img = cv::imread("./1.png", CV_LOAD_IMAGE_GRAYSCALE);
 
     cv::Mat out_img,des;
     vector<cv::KeyPoint> pts;
     
    Ptr<xfeatures2d::SIFT> sift=cv::xfeatures2d::SIFT::create();
     sift->detectAndCompute(img,cv::noArray(),pts,des);
     //檢測到的特征為pts,同時計算描述子為des
     // sift->detect(img,pts);//只進行檢測特征
 /*
     Ptr<xfeatures2d::SURF> surf=cv::xfeatures2d::SURF::create();
     surf->detectAndCompute(img,cv::noArray(),pts,des);
     // surf->detect(img,pts);
 */
     cv::drawKeypoints(img,pts,out_img);
     
     cv::imshow("Image", out_img);
     //cv::imwrite("sift.png",out_img);
     cv::waitKey(0);
 
     return 0;
 }

  SIFT的create函數默認參數共5個,為int nfeatures = 0,int nOctaveLayers = 3,double contrastThreshold = 0.04,double edgeThreshold = 10,double sigma = 1.6

其中nfeatures為保留的特征數(根據分數排序后),0表示保留所有檢測到的特征,也可以sift=cv::xfeatures2d::SIFT::create(100);保留分數最高的100個特征點。其余

參數以及介紹見https://docs.opencv.org/3.4.10/d5/d3c/classcv_1_1xfeatures2d_1_1SIFT.html

  SURF的create函數默認參數也是5個,為double hessianThreshold=100, int nOctaves=4, int nOctaveLayers=3, bool extended=false, bool upright=false。

emm...並沒有給現成的參數控制特征點數量,其他內容詳見 https://docs.opencv.org/3.4.10/d5/df7/classcv_1_1xfeatures2d_1_1SURF.html

png圖片:

檢測結果:SIFT和SURF

           


免責聲明!

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



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