Ich möchte einen Text auf ein Bild setzen. Ich schreibe den Code wie folgt:
cv2.putText(image,"Hello World!!!", (x,y), cv2.CV_FONT_HERSHEY_SIMPLEX, 2, 255)
Es gibt ERROR und sagt, dass das Objekt 'module' kein Attribut 'CV_FONT_HERSHEY_SIMPLEX' hat.
Abfrage
Kann ich den Schrifttyp nicht wie oben verwenden? Ich habe im Internet gesucht, aber nur die Syntax für Opencv C ++ für initFont gefunden. Dann dachte ich daran putText
, den Schrifttyp als Parameter zu übergeben. Aber es funktioniert nicht bei mir.
Irgendwelche Vorschläge?
text_width, text_height = cv2.getTextSize(text_description, font, fontScale, lineType)[0]
lineType
sollte sein,lineThickness
da dies die Parameterliste ist. Siehe: docs.opencv.org/2.4/modules/core/doc/…War
CV_FONT_HERSHEY_SIMPLEX
in Lebenslauf (1)? Hier ist alles, was ich für cv2 "FONT" zur Verfügung habe:Das Löschen des 'CV_' scheint für mich zu funktionieren.
cv2.putText(image,"Hello World!!!", (x,y), cv2.FONT_HERSHEY_SIMPLEX, 2, 255)
quelle
import cv2; [x for x in dir(cv2) if x.startswith('FONT_')]
Dies ist in der Tat ein ärgerliches Problem. Für Python 2.xx verwenden Sie:
und für Python 3.xx:
Ich empfehle die Verwendung einer Autocomplete-Umgebung (z. B. Pyscripter oder Scipy). Wenn Sie nach Beispielcode suchen, stellen Sie sicher, dass sie dieselbe Version von Python verwenden (wenn sie nicht sicherstellen, dass Sie den Code ändern).
quelle
Ich hatte ein ähnliches Problem. Ich würde vorschlagen, die
PIL
Bibliothek in Python zu verwenden, da sie den Text in einer bestimmten Schriftart zeichnet, im Vergleich zu eingeschränkten Schriftarten in OpenCV. Mit PIL können Sie eine beliebige auf Ihrem System installierte Schriftart auswählen.from PIL import ImageFont, ImageDraw, Image import numpy as np import cv2 image = cv2.imread("lena.png") # Convert to PIL Image cv2_im_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) pil_im = Image.fromarray(cv2_im_rgb) draw = ImageDraw.Draw(pil_im) # Choose a font font = ImageFont.truetype("Roboto-Regular.ttf", 50) # Draw the text draw.text((0, 0), "Your Text Here", font=font) # Save the image cv2_im_processed = cv2.cvtColor(np.array(pil_im), cv2.COLOR_RGB2BGR) cv2.imwrite("result.png", cv2_im_processed)
result.png
quelle
Ich weiß, dass dies eine wirklich alte Frage ist, aber ich denke, ich habe eine Lösung. In den neueren Versionen von openCV werden Schriftarten durch eine Zahl wie diese dargestellt
FONT_HERSHEY_SIMPLEX = 0, FONT_HERSHEY_PLAIN = 1, FONT_HERSHEY_DUPLEX = 2, FONT_HERSHEY_COMPLEX = 3, FONT_HERSHEY_TRIPLEX = 4, FONT_HERSHEY_COMPLEX_SMALL = 5, FONT_HERSHEY_SCRIPT_SIMPLEX = 6, FONT_HERSHEY_SCRIPT_COMPLEX = 7, FONT_ITALIC = 16
Sie müssen also nur den Schriftnamen durch die entsprechende Nummer ersetzen
cv2.putText(image,"Hello World!!!", (x,y), 0, 2, 255)
wieder weiß ich, dass es eine alte Frage ist, aber es kann jemandem in der Zukunft helfen
quelle
Hier ist der Code mit Parameterbezeichnungen
def draw_text(self, frame, text, x, y, color=BGR_COMMON['green'], thickness=1.3, size=0.3,): if x is not None and y is not None: cv2.putText( frame, text, (int(x), int(y)), cv2.FONT_HERSHEY_SIMPLEX, size, color, thickness)
Den Namen der Schriftart finden Sie in einer anderen Antwort in diesem Thread.
Auszug aus der Antwort von @Roeffus
Weitere Informationen finden Sie unter http://www.programcreek.com/python/example/83399/cv2.putText
quelle
Sie können cv2.FONT_HERSHEY_SIMPLEX anstelle von cv2.CV_FONT_HERSHEY_SIMPLEX in der aktuellen opencv-Version verwenden
quelle
Für das obige Beispiel würde die Lösung folgendermaßen aussehen:
import PILasOPENCV as Image import PILasOPENCV as ImageDraw import PILasOPENCV as ImageFont # from PIL import ImageFont, ImageDraw, Image import numpy as np import cv2 image = cv2.imread("lena.jpg") # Convert to PIL Image cv2_im_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) pil_im = Image.fromarray(cv2_im_rgb) draw = ImageDraw.Draw(pil_im) # Choose a font font = ImageFont.truetype("Roboto-Regular.ttf", 40) # Draw the text draw.text((0, 0), "Your Text Here", font=font) # Save the image cv2_im_processed = pil_im.getim() cv2.imshow("cv2_im_processed", cv2_im_processed) cv2.waitKey()
quelle