95 votes

Comment écrire du texte sur une image sous Windows en utilisant python opencv2

Je veux mettre du texte sur une image. J'écris le code comme suit :

cv2.putText(image,"Hello World!!!", (x,y), cv2.CV_FONT_HERSHEY_SIMPLEX, 2, 255)

Il donne un ERREUR, disant que l'objet 'module' n'a pas d'attribut 'CV_FONT_HERSHEY_SIMPLEX'.

Requête Ne puis-je pas utiliser le même type de police que ci-dessus ? J'ai cherché sur Internet, mais je n'ai trouvé que la syntaxe liée à Opencv C++ pour initFont. J'ai alors pensé à utiliser putText pour passer le type de police comme paramètre. Mais cela ne fonctionne pas pour moi.

Des suggestions ?

148voto

Vinay Vemula Points 1881

Ce code utilise cv2.putText pour superposer du texte sur une image. Vous devez avoir NumPy et OpenCV installés.

import numpy as np
import cv2

# Create a black image
img = np.zeros((512,512,3), np.uint8)

# Write some Text

font                   = cv2.FONT_HERSHEY_SIMPLEX
bottomLeftCornerOfText = (10,500)
fontScale              = 1
fontColor              = (255,255,255)
thickness              = 1
lineType               = 2

cv2.putText(img,'Hello World!', 
    bottomLeftCornerOfText, 
    font, 
    fontScale,
    fontColor,
    thickness,
    lineType)

#Display the image
cv2.imshow("img",img)

#Save image
cv2.imwrite("out.jpg", img)

cv2.waitKey(0)

42voto

Andenthal Points 715

Était CV_FONT_HERSHEY_SIMPLEX dans cv(1) ? Voici tout ce dont je dispose pour cv2 "FONT" :

FONT_HERSHEY_COMPLEX
FONT_HERSHEY_COMPLEX_SMALL
FONT_HERSHEY_DUPLEX
FONT_HERSHEY_PLAIN
FONT_HERSHEY_SCRIPT_COMPLEX
FONT_HERSHEY_SCRIPT_SIMPLEX
FONT_HERSHEY_SIMPLEX
FONT_HERSHEY_TRIPLEX
FONT_ITALIC

La suppression du "CV_" semble fonctionner pour moi.

cv2.putText(image,"Hello World!!!", (x,y), cv2.FONT_HERSHEY_SIMPLEX, 2, 255)

17voto

Akshay L Aradhya Points 145

J'ai eu un problème similaire. Je vous suggère d'utiliser le PIL La bibliothèque PIL est la bibliothèque la plus utilisée en python, car elle permet de dessiner le texte dans n'importe quelle police de caractères, contrairement aux polices limitées d'OpenCV. Avec PIL, vous pouvez choisir n'importe quelle police installée sur votre système.

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)

résultat.png

10voto

Roeffus Points 115

C'est en effet un problème un peu gênant. Pour python 2.x.x vous utilisez :

cv2.CV_FONT_HERSHEY_SIMPLEX

et pour Python 3.x.x :

cv2.FONT_HERSHEY_SIMPLEX

Je recommande d'utiliser un environnement d'autocomplétion (pyscripter ou scipy par exemple). Si vous cherchez des exemples de code, assurez-vous qu'ils utilisent la même version de Python (si ce n'est pas le cas, assurez-vous de modifier le code).

9voto

gerard Garvey Points 225

Je sais que c'est une vieille question, mais je pense avoir une solution. Dans les nouvelles versions d'openCV les polices sont représentées par un nombre comme ceci

    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

donc tout ce que vous avez à faire est de remplacer le nom de la police par le numéro correspondant

cv2.putText(image,"Hello World!!!", (x,y), 0, 2, 255)

Je sais que c'est une vieille question mais cela peut aider quelqu'un dans le futur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X