sudo pip install opencv-python
(Beispiel 1. Kartenillustration blueeyes2.jpg Quelle: [[All of 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 blueeyes1.jpg Quelle: Adere
Verwenden Sie OpenCV putTxt
Bei der Anzeige oben links
sample.py
import PIL
from PIL import Image
from PIL import ExifTags
import cv2 as cv
import numpy as np
def write_text(image_path ,x ,y):
str = "ATK:3000, DEF:2500"
str_height = 25
str_width = 340
img = cv.imread(image_path)
#Fügen Sie einen schwarzen Hintergrund hinzu
cv.rectangle(img, (x, y), (x+str_width, y-str_height), (0, 0, 0), cv.FILLED, cv.LINE_AA)
#Fügen Sie eine Zeile hinzu
cv.rectangle(img, (x, y), (x+str_width, y-str_height), (0, 0, 0), 2, cv.LINE_AA)
#Buchstaben hinzufügen
cv.putText(img, str, (x, y),
cv.FONT_HERSHEY_PLAIN, 2.0,
(255, 255, 255), 2, cv.LINE_AA)
cv.imwrite(image_path + '.new.jpg', img)
if __name__ == '__main__':
write_text('blueeyes1.jpg', 10, 30)
Lauf
python sample.py
Kombinieren Sie mit dem folgenden Code
Kartenabbildungen aus Bildern mithilfe von Feature-Point-Matching suchen
sample.py
import cv2
import numpy as np
fname_img1='blueeyes1.jpg'
fname_img2='blueeyes2.jpg'
img1 = cv2.imread(fname_img1)
img2 = cv2.imread(fname_img2)
def write_text(img ,x ,y):
str = "ATK:3000, DEF:2500"
str_height = 25
str_width = 340
#Fügen Sie einen schwarzen Hintergrund hinzu
cv2.rectangle(img, (x, y), (x+str_width, y-str_height), (0, 0, 0), cv2.FILLED, cv2.LINE_AA)
#Fügen Sie eine Zeile hinzu
cv2.rectangle(img, (x, y), (x+str_width, y-str_height), (0, 0, 0), 2, cv2.LINE_AA)
#Buchstaben hinzufügen
cv2.putText(img, str, (x, y),
cv2.FONT_HERSHEY_PLAIN, 2.0,
(255, 255, 255), 2, cv2.LINE_AA)
cv2.imwrite(fname_img1 + '.new.jpg', img)
def detect(img1, 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)
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)
write_text(img1 ,top_left[0] ,top_left[1])
detect(img1, img2)
Lauf
$ $ python sample.py
[[ 6.43984577e-01 -4.58173428e-02 1.61203033e+02]
[ 2.85230902e-02 4.12312421e-01 1.50286636e+02]
[ 4.54533377e-04 -5.75705548e-04 1.00000000e+00]]
161.2030333928222
150.28663624674783
An der Position der Karte wird eine Zeichenkette ausgegeben
Es ist relativ leicht zu sehen.
Es kann für Yugiohs Fernduell verwendet werden.
opencv.jp cv::putText Ich habe versucht, das Gesicht mit OpenCV zu authentifizieren (Teil 2: Authentifizierung) So schreiben Sie Text auf ein Bild Finden Sie Kartenillustrationen aus Bildern mithilfe des Feature-Point-Matchings
Recommended Posts