Skip navigation

A SIFT jellemződetektor használata OpenCV-ben

A SIFT jellemződetektor az OpenCV függvénykönyvtárban

A SIFT jellemződetektor az OpenCV-ben az xfeatures2d (amely az opencv_contrib függvénykönyvtáron belül van) csomagba került, mivel ipari és kereskedelmi felhasználása szabadalmi költséget von magaután. Oktatási és kutatási célra a használata ingyenes.

A jellemződetektor alábbi paramétereit állíthatjuk be:

  • nfeatures: hány jellemzőpontot szeretnénk megtartani (ha 0-t írunk, akkor nem korlátozzuk ezt a számot)
  • nOctaveLayers: a rétegek száma minden oktávhoz (Lowe algoritmusában 3)
  • constantThreshold: egy küszöbérték az alacsony kontraszttal rendelkező ter

Példaprogram

Az alábbi példa a következő lépésekből áll:

  1. A kép megnyitása.
  2. A kép szürkeárnyalatossá konvertálása.
  3. A jellemződetektor létrehozása.
  4. Jellemzőpontok detektálása.
  5. Leírók számítása a jellemzőpontokhoz.
  6. Jellemzőpontok kirajzolása.

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

SOURCE_IMAGE='lisbon1.jpg'
OUTPUT_IMAGE='sift_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
sift = cv2.xfeatures2d.SIFT_create()
keypoints = sift.detect(gray_img, None)

## kulcspont leírók számítása
keypoints, descriptors = sift.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()