Bildvorverarbeitung zum Extrahieren von 2D -ZahlenlistePython

Python-Programme
Anonymous
 Bildvorverarbeitung zum Extrahieren von 2D -Zahlenliste

Post by Anonymous »

Ich habe mich ein Rätsel lösen. Das Spiel ist 'Fruit Box' und Sie können es den Link unten durchspielen. Um dies zu tun, muss Ich muss Zahlen aus dem Spielbildschirm extrahieren. gefunden "Pytesseract", das Zeichen aus dem Bild identifizieren kann und mit der Verwendung fast das Extrahieren beendet hat. Aber der Ergebniswert war für mich nicht erfüllt. Zuerst habe ich die Schwellenwertfunktion verwendet. Ich musste das meiste davon löschen, weil der Hintergrund die gleiche weiße Farbe hatte wie die Zahlen, die ich anstrebte. Der Code und das Bild sind so. < /P>
import pytesseract
import os
import cv2

image = os.getcwd() + '\\appletest.png'
img=cv2.imread(image)
grayImage = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret,img_binary = cv2.threshold(grayImage, 246, 255, cv2.THRESH_BINARY)
text = pytesseract.image_to_string(img_binary, config='--psm 6')
# text = pytesseract.image_to_string(img_binary, config='--psm 6 --oem 3 -c tessedit_char_whitelist=0123456789 ')
print(text)
cv2.imshow('Image', img_binary)
cv2.waitKey(0)
cv2.destroyAllWindows()
< /code>
Threshold -Ergebnis < /p>
Die Funktion 'image_to_string' gibt Nummern wie diese < /p>
zurück41233366429816415
412567594457956471
3572263437133946
68241491629765459
73278354155567666
7796565142328726
15349752855757571
31221174825264255
83517514412317216
1957899195693134
< /code>
Es ist fast gleich! Es gibt jedoch eine falsche Zahl. (Zum Beispiel sollte 412567594457 956
471 nur 412567594457 96 471)
sein Also musste ich einen anderen Weg finden. Dieser Tring ist einfach. Erkennung von Äpfeln zuerst, Floodfill -Hintergrund zweitens. Der Code und das Ergebnis sind unten. < /p>
import pytesseract
import os
import cv2
import numpy as np

image = os.getcwd() + '\\appletest.png'

img=cv2.imread(image)
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
#find apple color
dst1 = cv2.inRange(hsv, (0, 100, 20), (10, 255, 255))
rows, cols = dst1.shape[:2]
mask = np.zeros((rows+2, cols+2), np.uint8)
loDiff, upDiff = (10,10,10), (10,10,10)
retval = cv2.floodFill(dst1, mask, (1,1), (255,255,255), loDiff, upDiff)
text = pytesseract.image_to_string(dst1, config='--psm 6 --oem 3 -c tessedit_char_whitelist=0123456789 ')
# text = pytesseract.image_to_string(img_gradient, config='--psm 6')
print(text)
cv2.imshow('Image', dst1)
cv2.waitKey(0)
cv2.destroyAllWindows()
< /code>
Floodfill -Ergebnis < /p>
Das Ergebnis ist dies. < /p>
412333664298164215
412567594457964721
3957722634237619946
68241491629765458
732783542195567666
779685651412328726
15349752855757571
3912214174825264255
835175144121313217281216
15179191956988322134
< /code>
Es wurden jedoch immer noch falsche Zahlen hinzugefügt. Schärfen, Erosion, Dilatation, Unschärfe), konnte aber keine perfekte richtige Zahlenliste sehen. Können Sie mich raten, diese Situation zu lösen?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post