最近在學習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...