python opencv特徵點檢測和匹配教程

2021-09-25 12:01:27 字數 4612 閱讀 4966

import cv2

import numpy as np

import random

import os

import matplotlib.pyplot as plt

from timeit import default_timer as timer

# 從影象資料夾中獲取所有的影象

imgdir =

'imgs/'

imgfiles = os.listdir(imgdir)

# 隨機讀取兩張

imgs = random.sample(imgfiles,2)

img1 = cv2.imread(os.path.join(imgdir, imgs[0]

))img2 = cv2.imread(os.path.join(imgdir, imgs[1]

))# 由於需要在plt下顯示影象,需要將opencv中bgr的順序改為rgb

img1 = cv2.cvtcolor(img1, cv2.color_bgr2rgb)

img2 = cv2.cvtcolor(img2, cv2.color_bgr2rgb)

# 轉換為灰度圖

# 初始化檢測運算元

sift = cv2.xfeatures2d_sift.create(

)# 計算特徵點和描述子

kps1, des1 = sift.detectandcompute(gray1,

none

)kps2, des2 = sift.detectandcompute(gray2,

none

)# 展示描述子

參考資料:

brute-force matcher將第乙個集合的描述乙個向量與第二個集合的所有向量進行匹配,計算出他們之間的「距離」。最後返回最近的乙個。

首先使用cv2.bfmatcher()建立物件。該函式接受兩個引數。第乙個引數確定距離的計算方式。預設情況下是cv2.norm_l2,這一方式適用於sift、surf(cv2.norm_l1也適用)。對於基於 binary string的方法,如orb,breif,brisk等等,cv2.norm_hamming計算方式是適用的。如果 orb 適用 wta_k == 3 or 4, 則應該使用cv2.norm_hamming2。

第二個引數是乙個bool值,預設為false。如果設定為true,匹配結果返回的將是(i,j),即集合a的第i個描述向量對應b中第j個描述向量。

bf = cv2.bfmatcher(

)matches = bf.knnmatch(des1, des2, k=2)

# 如果a中某個點與b中最近相近的2個點的距離區分度足夠大,則是好的匹配

對於orb,引數設定為:

特徵點匹配

一 特徵點 角點 匹配 影象匹配能夠應用的場合非常多,如目標跟蹤,檢測,識別,影象拼接等,而角點匹配最核心的技術就要屬角點匹配了,所謂角點匹配是指尋找兩幅影象之間的特徵畫素點的對應關係,從而確定兩幅影象的位置關係。角點匹配可以分為以下四個步驟 1 提取檢測子 在兩張待匹配的影象中尋找那些最容易識別的...

python opencv三點仿射變換

一張圖來表明要實現的功能 說明 將一張正正方方的矩形圖轉換成平行四邊形 甚至不規則四邊形 的操作。平行四邊形的圖形看起來具有3d視角,在很多方面都有應用。我們直接來實現這個操作 我們只需對應出3個點就可以使用opencv封裝好的函式進行這個操作了,哪三個點呢?左上 右上 左下。三個點的座標就是6個數...

Python Opencv中高斯噪點和高斯模糊

1.什麼是高斯模糊 把要模糊的像素色值統計,用數學上加權平均的計算方法 高斯函式 得到色值,對範圍 半徑等進行模糊 2.高斯模糊的應用場景 一些美顏軟體 美顏相機上的磨皮和毛玻璃特效基本上都是用的高斯模糊,並且大部分影象處理軟體中都有高斯模糊的操作,除此之外,高斯模糊還具有減少影象層次和深度的功能 ...