Példa
A feladat a következő:
- Nyissuk meg a két input képet!
- Konvertáljuk szürkeárnyalatossá őket!
- Detektáljunk rajtuk jellemzőpontokat és számoljuk ki a leírókat is!
- Hozzuk létre a párosítót és hajtsuk végre a párosítást!
- Rajzoljuk ki a párosított pontokat!
import cv2
import numpy as np
SOURCE_IMAGE1='lisbon1.jpg'
SOURCE_IMAGE2='lisbon2.jpg'
OUTPUT_IMAGE1='keypoints_lisbon1.jpg'
OUTPUT_IMAGE2='keypoints_lisbon2.jpg'
MATCHING_IMAGE='matching_lisbon1_lisbon2.jpg'
## képek beolvasása
img1 = cv2.imread(SOURCE_IMAGE1);
img2 = cv2.imread(SOURCE_IMAGE2);
## a képet szürkeárnyalatossá konvertáljuk
gray_img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
gray_img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
## jellemzőpontok detektálása
surf = cv2.xfeatures2d.SURF_create()
keypoints1 = surf.detect(gray_img1, None)
keypoints2 = surf.detect(gray_img2, None)
## kulcspont leírók számítása
keypoints1, descriptors1 = surf.compute(gray_img1, keypoints1)
keypoints2, descriptors2 = surf.compute(gray_img2, keypoints2)
## kulcspontok kirajzolása
out_img1 = cv2.drawKeypoints(gray_img1, keypoints1, descriptors1, color=(255, 0, 255), flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
out_img2 = cv2.drawKeypoints(gray_img2, keypoints2, descriptors2, color=(255, 0, 255), flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
cv2.imwrite(OUTPUT_IMAGE1, out_img1)
cv2.imwrite(OUTPUT_IMAGE2, out_img2)
## pontpárok keresése
bfMatcher = cv2.BFMatcher(cv2.NORM_L2, crossCheck=True) ## brute-force párosító
## bináris leírókhoz, mint az ORB,
## a Hamming-távolságot javasolt használni
matches = bfMatcher.match(descriptors1, descriptors2);
img3 = cv2.drawMatches( img1,keypoints1, img2,keypoints2, matches[:50], None, flags=2)
cv2.imwrite(MATCHING_IMAGE, img3)