Dies ist ein Memorandum zum Auffinden von Kartenillustrationen aus Bildern mithilfe der Feature-Point-Anpassung.
(Beispiel 1. Kartenillustration test2.png Quelle: [[Alle Blue Eyes White Dragon] Legendäre Drachenbahn mit dem stärksten Titel von Yugioh](https://yu-gi-oh.xyz/ Blue Eyes White Dragon / post- 49725 /)
(Beispiel) 2. Bild einschließlich Kartenillustration test1.png Quelle: Adere
Code, der Feature-Punkte berechnet und Kartenillustrationen aus Bildern extrahiert Referenz: Mickey anhand der Feature-Point-Übereinstimmung erkennen
Der Feature-Point verwendet 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)
Ausführungsergebnis
$ 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
Berechnen und stimmen Sie Feature-Punkte ab
Rahmen erkennen
Es scheint, dass ein Blatt erkannt werden kann.
Die Rahmenabweichung muss angepasst werden (derzeit fester Wert).
Mehrere Blätter sind streng.
Es kann für Yugiohs Fernduell verwendet werden.
nichts Besonderes
[[Alles über Blue Eyes White Dragon] Der Ort des legendären Drachen mit dem stärksten Titel von Yugioh](https://yu-gi-oh.xyz/ Blue Eyes White Dragon / post-49725 /) Adere Mickey anhand des Feature-Point-Matchings erkennen AKAZE
Recommended Posts