Entfernen Sie Hintergrundtext und Rauschen aus einem Bild mithilfe der Bildverarbeitung mit OpenCV
Posted: 17 Jan 2025, 07:13
Ich habe diese Bilder


Wofür ich den Text im entfernen möchte Hintergrund. Es sollten nur die Captcha-Zeichen übrig bleiben (d. h. K6PwKA, YabVzu). Die Aufgabe besteht darin, diese Zeichen später mit Tesseract zu identifizieren.
Das habe ich versucht, aber es liefert keine sehr gute Genauigkeit.
Wie kann ich das Gleiche verbessern?
Hinweis:
Ich habe alle Vorschläge ausprobiert, die ich für diese Frage bekam, aber keiner davon hat für mich funktioniert.
BEARBEITEN:
Gemäß Elias, ich habe versucht, die Farbe des Captcha-Textes mit Photoshop zu finden, indem ich ihn in Graustufen konvertiert habe Es stellte sich heraus, dass es irgendwo zwischen [100, 105] lag. Anschließend bewerte ich das Bild anhand dieses Bereichs. Aber das Ergebnis, das ich mit Tesseract erhalten habe, lieferte kein zufriedenstellendes Ergebnis.
Ausgabe:
Ergebnis:
[img]https://i .sstatic.net/AqYeO.png[/img]
BEARBEITEN 2:
ergibt:
[img]https://i .sstatic.net/rSrSz.png[/img]
und der Text als
Gibt es eine Möglichkeit, es etwas weicher zu machen?


Wofür ich den Text im entfernen möchte Hintergrund. Es sollten nur die Captcha-Zeichen übrig bleiben (d. h. K6PwKA, YabVzu). Die Aufgabe besteht darin, diese Zeichen später mit Tesseract zu identifizieren.
Das habe ich versucht, aber es liefert keine sehr gute Genauigkeit.
Code: Select all
import cv2
import pytesseract
pytesseract.pytesseract.tesseract_cmd = r"C:\Users\HPO2KOR\AppData\Local\Tesseract-OCR\tesseract.exe"
img = cv2.imread("untitled.png")
gray_image = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gray_filtered = cv2.inRange(gray_image, 0, 75)
cv2.imwrite("cleaned.png", gray_filtered)
Hinweis:
Ich habe alle Vorschläge ausprobiert, die ich für diese Frage bekam, aber keiner davon hat für mich funktioniert.
BEARBEITEN:
Gemäß Elias, ich habe versucht, die Farbe des Captcha-Textes mit Photoshop zu finden, indem ich ihn in Graustufen konvertiert habe Es stellte sich heraus, dass es irgendwo zwischen [100, 105] lag. Anschließend bewerte ich das Bild anhand dieses Bereichs. Aber das Ergebnis, das ich mit Tesseract erhalten habe, lieferte kein zufriedenstellendes Ergebnis.
Code: Select all
gray_filtered = cv2.inRange(gray_image, 100, 105)
cv2.imwrite("cleaned.png", gray_filtered)
gray_inv = ~gray_filtered
cv2.imwrite("cleaned.png", gray_inv)
data = pytesseract.image_to_string(gray_inv, lang='eng')
Code: Select all
'KEP wKA'
[img]https://i .sstatic.net/AqYeO.png[/img]
BEARBEITEN 2:
Code: Select all
def get_text(img_name):
lower = (100, 100, 100)
upper = (104, 104, 104)
img = cv2.imread(img_name)
img_rgb_inrange = cv2.inRange(img, lower, upper)
neg_rgb_image = ~img_rgb_inrange
cv2.imwrite('neg_img_rgb_inrange.png', neg_rgb_image)
data = pytesseract.image_to_string(neg_rgb_image, lang='eng')
return data
[img]https://i .sstatic.net/rSrSz.png[/img]
und der Text als
Code: Select all
GXuMuUZ