Skip navigation

A SURF detektor használata OpenCV-ben

A SURF detektor használata az OpenCV függvénykönyvtárban

A SURF detektor az xfeatures2d csomagba került (amely az opencv_contrib függvénykönyvtár része), mivel kereskedelmi és ipari felhasználása szabadalmi költséget von magaután. Oktatási és kutatási célra ingyen használható.

A SURF detektor beállítandó paraméterei a következők:

  • hessianThreshold: a Hesse-féle mátrix értékek küszübértéke
  • nOctave: a piramis-oktávok száma
  • nOctaveLayers: az oktáv-rétegek száma
  • extended: egy kapcsoló (igaz/hamis), hogy 128- vagy 64-hosszú leíróvektor készüljön
  • upright: egy kapcsoló (igaz/hamis), hogy számoljon-e orientációt vagy sem

Példaprogram

Az alábbi példa bemutatja a SURF detektor használatát:

  1. Kép megnyitása.
  2. A színes kép szürkeárnyalatossá konvertálása
  3. A jellemzőpont detektor létrehozása.
  4. Jellemzőpontok (kulcspontok) detektálása a szürkeárnyalatos képen.
  5. Jellemzőpontok leírása.
  6. Jellemzőpontok kirajzolása.

import cv2
import numpy as np
from matplotlib import pyplot as plt


SOURCE_IMAGE='lisbon1.jpg'
OUTPUT_IMAGE='surf_lisbon1.jpg'

## kép beolvasása
img = cv2.imread(SOURCE_IMAGE);

## a képet szürkeárnyalatossá konvertáljuk
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

## jellemzőpontok detektálása
surf = cv2.xfeatures2d.SURF_create()
keypoints = surf.detect(gray_img, None)

## kulcspont leírók számítása
keypoints, descriptors = surf.compute(gray_img, keypoints)

## kulcspontok kirajzolása
out_img = cv2.drawKeypoints(gray_img, keypoints, descriptors, color=(255, 0, 255), flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)

cv2.imwrite(OUTPUT_IMAGE, out_img)

plt.imshow(out_img);
plt.title(OUTPUT_IMAGE)
plt.show()