Ceci est un mémorandum pour trouver des illustrations de cartes à partir d'images en utilisant la correspondance des points caractéristiques.
(Exemple 1. Illustration de la carte test2.png Source: [[All of Blue Eyes White Dragon] Trajectoire du dragon légendaire avec le titre le plus fort de Yugioh](https://yu-gi-oh.xyz/ Blue Eyes White Dragon / post- 49725 /)
(Exemple) 2. Image avec illustration de la carte test1.png Source: Adere
Code qui calcule les points caractéristiques et extrait les illustrations de cartes à partir d'images Référence: Détecter Mickey par correspondance de points caractéristiques
Le point caractéristique utilise AKAZE.
sample.py
import cv2
import numpy as np
fname_img1='test1.png'
fname_img2='test2.png'
img1 = cv2.imread(fname_img1)
img2 = cv2.imread(fname_img2)
gray1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
gray2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
akaze = cv2.AKAZE_create()
kp1, des1 = akaze.detectAndCompute(gray1, None)
kp2, des2 = akaze.detectAndCompute(gray2, None)
#img1_sift = cv2.drawKeypoints(gray1, kp1, None, flags=4)
#img2_sift = cv2.drawKeypoints(gray2, kp2, None, flags=4)
#cv2.imwrite('out1.png', img1_sift)
#cv2.imwrite('out2.png', img2_sift)
bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)
matches = bf.match(des1, des2)
matches = sorted(matches, key = lambda x:x.distance)
img3 = cv2.drawMatches(img1, kp1, img2, kp2, matches[:10], None, flags=2)
cv2.imwrite('out-match.png', img3)
#homography
good_match_rate = 0.15;
good = matches[:int(len(matches) * good_match_rate)]
min_match=10
if len(good) > min_match:
src_pts = np.float32([kp1[m.queryIdx].pt for m in good]).reshape(-1, 1, 2)
dst_pts = np.float32([kp2[m.trainIdx].pt for m in good]).reshape(-1, 1, 2)
# Find homography
M, mask = cv2.findHomography(dst_pts, src_pts, cv2.RANSAC)
matchesMask = mask.ravel().tolist()
print(M)
print(M[0][2])
print(M[1][2])
height = img2.shape[0]
width = img2.shape[1]
top_left = (int(M[0][2] +0.5), int(M[1][2] +0.5)); #tx,ty
bottom_right = (top_left[0] + width, top_left[1] + height)
#result
result = cv2.imread(fname_img1)
cv2.rectangle(result,top_left, bottom_right, (255, 0, 0), 10)
cv2.imwrite("result.png ", result)
Résultat d'exécution
$ python sample.py
[[ 6.43984577e-01 -4.58173428e-02 1.61203033e+02]
[ 2.85![result.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344880/23ae3f02-409a-6a3a-5e8b-673a20afa502.png)
230902e-02 4.12312421e-01 1.50286636e+02]
[ 4.54533377e-04 -5.75705548e-04 1.00000000e+00]]
161.2030333928222
150.28663624674783
Calculer et faire correspondre les points caractéristiques
Détecter le cadre
Il semble qu'une feuille puisse être détectée.
L'écart de trame doit être ajusté (valeur actuellement fixe)
Les feuilles multiples sont strictes.
Il peut être utilisé pour le duel à distance de Yugioh.
rien de spécial
[[Tout sur Blue Eyes White Dragon] Le lieu du dragon légendaire avec le titre le plus fort de Yugioh](https://yu-gi-oh.xyz/ Blue Eyes White Dragon / post-49725 /) Adere Détecter Mickey par correspondance de points caractéristiques AKAZE
Recommended Posts