OpenCV中特徵檢測,提取與匹配使用方法學習

2021-06-17 01:22:17 字數 3225 閱讀 5817

最近在學習opencv,一般看官方一邊看書,發現自己原來用的很多介面早已被更新,分享一下學習心得體會,也希望大家可以不吝賜教!

首先看到在mastering opencv with practical computer vision projects書中,特徵點檢測,特徵點描述(特徵提取),特徵點匹配用了以下**:

cv::ptrdetector = new cv::orb(1000);			// 建立orb特徵點檢測

cv::ptrextractor = new cv::freak(true, true); // 用freak特徵來描述特徵點

cv::ptrmatcher = new cv::bfmatcher(cv::norm_hamming, // 特徵匹配,計算hamming距離

看到這段**的時候很疑惑,為什麼可以這麼寫呢?跟到feature2d.hpp中看了看,發現:

class cv_exports_w orb : public feature2d

class cv_exports_w feature2d : public featuredetector, public descriptorextractor

cv::ptrcl = createclahe(80, size(4, 4))
vectormatches;

matcher->match(descriptors1, descriptors2, matches);

mat imresultori;

drawmatches(img1, keypoints1, img2, keypoints2, matches, imresultori, cv_rgb(0,255,0), cv_rgb(0,255,0));

我和我的小夥伴都驚呆了……

當然啦,做完特徵點匹配,我們還可以通過ransac方法計算透視變換矩陣來篩選符合相同透視的特徵點,這樣做可以去除很多錯誤的匹配。

std::vectorinliersmask(srcpoints.size());
homography = cv::findhomography(srcpoints, dstpoints, cv_fm_ransac, reprojectionthreshold, inliersmask);
到此,乙個簡單的匹配任務就算是完成啦。

看完這部分內容最大的心得體會就是,作為乙個寫工程**的人來說,要好好的去學習和掌握工具,可以避免好多沒有意義的重複勞動。

跑了乙個例子:

執行結果:

特徵匹配:

一致的透視變換:

光流:

以上使用的**是mastering opencv with practical computer vision projects書上的原始碼經整理以後的**,順便嘗試了一下光流演算法的呼叫。通過對這段原始碼的學習,基本能夠掌握opencv2.4版本以後檢測,特徵提取與匹配方法。如果呼叫遇到困難,還是可以直接檢視原始碼來的更快捷。

Opencv特徵提取與目標檢測03

基於harris角點檢測理論與 omasi檢點檢測理論,我們可以通過獲取矩陣m的兩個特徵值以及qualitylevel的值,動態設計計算閾值t的公式,來選擇我們需要的有效角點。第乙個api 基於harris角點檢測理論的,輸出的影象dst必須定義為cv 32fc1等型別,且 矩陣的每個特徵值由下式求...

Opencv特徵提取與目標檢測04

無論是harris角點檢測,shi tomasi角點檢測都無法對畫素點精準定位,進而無法滿足一些高精度影象角點處理,追蹤的問題。如跟蹤。相機矯正,三維重建,幾何測量等。正如圖所描述的。因此,亞畫素級別角點檢測應運而生。亞畫素 面陣攝像機的成像面以畫素為最小單位。例如某cmos攝像晶元,其畫素間距為5...

特徵點提取opencv

opencv中提供了harris角點檢測的介面,即cv cornerharris 缺陷 角點是畫素級別的,速度較慢 dst cv2.cornerharris gray,2,3,0.04 img 資料型別為 float32 的輸入影象 blocksize 角點檢測中要考慮的領域大小 ksize sob...