本章内容:
1. surf特征點檢測
2. cv::KeyPoint 屬性分析
3.surf屬性分析
1. surf特征點檢測

輸出結果
2. cv::KeyPoint 屬性分析
輸出結果:
3.surf屬性分析
輸出結果
源碼
#include <ostream>
#include <opencv.hpp>
#include<opencv2/opencv.hpp>
#include "opencv2/xfeatures2d.hpp"
int main(int argc, char *argv[])
{
cv::String fileName = "/home/wang/dev/Image/heihei.jpeg";
cv::Mat src = cv::imread(fileName);
if(src.data == NULL){
printf("圖像讀入失敗\n");
return -1;
}
cv::imshow("src",src);
cv::Ptr<cv::xfeatures2d::SURF> surf= cv::xfeatures2d::SURF::create();
std::vector<cv::KeyPoint> KeyPs;
surf->detect(src,KeyPs);
cv::Mat dst;
cv::drawKeypoints(src,KeyPs,dst);
cv::imshow("dst",dst);
// 列印輸出結果
std::cout << "KeyPs.size():= " << KeyPs.size() << std::endl;
std::cout << "KeyPs[0].pt:= " << KeyPs[0].pt << std::endl;
std::cout << "KeyPs[0].size:= " << KeyPs[0].size << std::endl;
std::cout << "KeyPs[0].angle:= " << KeyPs[0].angle << std::endl;
std::cout << "KeyPs[0].octave:= " << KeyPs[0].octave << std::endl;
std::cout << "KeyPs[0].class_id:= " << KeyPs[0].class_id << std::endl;
std::cout << "預設 hessianThreshold= " << surf->getHessianThreshold() << std::endl;
surf->setHessianThreshold(50);
std::cout << "設定後 hessianThreshold= " << surf->getHessianThreshold() << std::endl;
std::cout << "預設 nOctaves= " << surf->getNOctaves() << std::endl;
surf->setNOctaves(5);
std::cout << "設定後 nOctaves= " << surf->getNOctaves() << std::endl;
std::cout << "預設 nOctaveLayers= " << surf->getNOctaveLayers() << std::endl;
surf->setNOctaveLayers(5);
std::cout << "設定後 nOctaveLayers= " << surf->getNOctaveLayers() << std::endl;
std::cout << "預設 extended= " << surf->getExtended() << std::endl;
surf->setExtended(1);
std::cout << "設定後 extended= " << surf->getExtended() << std::endl;
std::cout << "預設 upright= " << surf->getUpright() << std::endl;
surf->setUpright(1);
std::cout << "設定後 upright= " << surf->getUpright() << std::endl;
cv::waitKey(0);
return 1;
}