opencv特徵檢測及匹配通用步驟及Code

2021-08-25 05:50:09 字數 2527 閱讀 3650

當我們學習乙個新的知識的時候,往往我們第一點能夠想到的就是這個東西有什麼用,有沒有實際價值。如果學會了一樣本領,現實生活中卻用不到,這也是一種浪費,浪費的是時間精力。

那麼,特徵檢測在視覺領域有哪些地方可以用到呢?如下:

1、影象匹配;

2、影象拼接;

3、實時跟蹤;

…… 什麼是特徵檢測呢?所謂的特徵檢測直觀一些的講就是,你用手機拍了兩幅,在這兩幅中有重疊的區域,想要找出這兩幅中相似的部分,度量他們是否相似的一些特徵就是我們檢測出來的特徵點。現在我們要讓計算機去找到這些特徵點,會是什麼樣子呢?請看下面的例子。

首先我從**上擷取了兩張,如下:

用肉眼不難發現兩張中的建築是有重疊的部分的,那麼我們來看一下使用opencv檢測出來的重合部分或者說是具有相同特徵的部分是什麼樣子的呢?

上面這幅圖是使用surf特徵匹配演算法實現的特徵匹配效果圖。

如果覺得有意思的朋友們,我們可以接著往下看看,使用c++和opencv是如何實現的。

我將特徵檢測的步驟分成了以下幾個部分。

//步驟一:讀取並將灰度化

//code:

mat src1, src2;

src1 = imread("路徑");

src2 = imread("路徑");

mat graysrc1, graysrc2;

cvtcolor(src1, graysrc1, cv_bgr2gray);

cvtcolor(src2, graysrc2, cv_bgr2gray);

//步驟二:提取特徵並描述

//code:

vector

keys1;

vector

keys2;

ptrdetector = xfeatures2d::surf::create(1500);

mat descriptormat1, descriptormat2;

detector->detectandcompute(src1, mat(), keys1, descriptormat1);

detector->detectandcompute(src2, mat(), keys2, descriptormat2);

//步驟三:特徵點匹配

//code:

cv::bfmatcher matcher;

std::vector

matches;

matcher.match(descriptormat1, descriptormat2, matches);

//步驟四:獲取優秀匹配點

//code:

double max_dist = 0; double min_dist = 100;

for (int i=0; idouble dist = matches[i].distance;

if (dist < min_dist) min_dist = dist;

if (dist > max_dist) max_dist = dist;

}cout

<

<< max_dist

<

<< min_dist

< dmatch > good_matches;

for (int i=0; iif (matches[i].distance < 0.2*max_dist)

}

//步驟五:繪製特徵匹配圖

以上就是整個特徵檢測的實現過程,根據實際專案需求,可以替換為sift,orb,fast等演算法,僅需改動演算法選擇部分即可,其它**博主已經寫成了具有通用型的格式,任何檢測演算法都可以直接使用。

覺得有用的朋友可以幫博主點一波關注呦,謝謝

有問題的朋友可以聯絡博主本人進行問題諮詢,有需要相關資料及開發環境也可以聯絡博主本人獲取。

如有不對的地方請指正,謝謝各位!

opencv 特徵值檢測和匹配

影象的特徵值 影象的特徵值簡單理解就是邊緣,角點,紋理等 角點在影象的邊緣中,有一些特殊的畫素點值得我們特別關注,那就是影象邊緣的角點,角點更好反應影象中物件的整體特徵 harris角點檢測 shi tomasi角點檢測 private void omasicornerdemo mat src,ma...

Opencv之特徵匹配

import cv2 import numpy as np import matplotlib.pyplot as plt matplotlib inline def cv show name,img cv2.imshow name,img cv2.waitkey 0 cv2.destroyallw...

基於C 的opencv(十三)特徵檢測與匹配

特徵點的檢測和匹配是計算機視覺中的重要技術。在物體檢測 視覺跟蹤 三維重建等領域都有很廣泛的應用。opencv中包含以下特徵檢測方法 1.fast fastfeaturedetector 2.star starfeaturedetector 3.sift sift nonfree module 4....