[OpenCV] opencv接口實現ORB特徵檢測
背景
windows10下安裝的opencv是opencv-3.4.5-vc14_vc15.exe;
關於windows10下vs配置opencv參考博客:
[opencv讀圖] Windows10下VS2019加載opencv,讀圖
https://blog.csdn.net/jn10010537/article/details/107125886
code sample
#include <opencv2/opencv.hpp>
#include <windows.h>
#include <iostream>
using namespace cv;
int main(){
//---------------------------------------------
//需要引入的包含文件#include <windows.h>
//LARGE_INTEGER的數據結構來表示64位數據
//nFreq時鐘頻率,nBeginTime開始時間,nEndTime結束時間
LARGE_INTEGER nFreq, nBeginTime, nEndTime;
//QueryPerformanceFrequency()獲得機器內部定時器的時鐘頻率;
QueryPerformanceFrequency(&nFreq);
//---------------------------------------------
Mat image = imread("timg3.jpg",0);//讀取灰度圖片
//resize縮小圖片
Mat resizeImg;
resize(image,resizeImg, Size(), 0.5, 0.5, INTER_LINEAR);
// vector of keyPoints,不需要再引入包含文件#include <vector>了;
std::vector<KeyPoint> keyPoints;
// construction of the orb feature detector object,初始化ORB檢測器
Ptr<FeatureDetector> orb = ORB::create();
//需要引入的包含文件#include <windows.h>
//QueryPerformanceCounter()這個函數返回高精確度性能計數器的值(cpu運行的時鐘週期數)
QueryPerformanceCounter(&nBeginTime);
//feature point detection用ORB找到關鍵點
orb->detect(resizeImg, keyPoints);
QueryPerformanceCounter(&nEndTime);
//將週期/頻率得到時間
double time = double(nEndTime.QuadPart - nBeginTime.QuadPart) / nFreq.QuadPart;
std::cout << "運行時間: " << time * 1000 << "ms" << std::endl;
//畫出關鍵點
drawKeypoints(resizeImg, keyPoints, resizeImg, Scalar(0, 0, 255), DrawMatchesFlags::DRAW_OVER_OUTIMG);
imshow("ORB_feature_img", resizeImg);
waitKey(0);
return 0;
}
運行結果如下:
備註:
如果在調試過程中遇到:被調用的對象已與其客戶斷開連接,請重啓VS,重新進入;