web-dev-qa-db-fra.com

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

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

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

Cela donne ERROR, en disant que l'objet 'module' n'a pas d'attribut 'CV_FONT_HERSHEY_SIMPLEX'

Requête Puis-je utiliser le type de police ci-dessus? J'ai cherché sur Internet, mais je n'ai trouvé que la syntaxe liée à Opencv C++ pour initFont. Ensuite, j'ai pensé à utiliser putText pour passer le type de police en tant que paramètre. Mais ça ne marche pas pour moi.

Aucune suggestion?

44

Ce code utilise cv2.putText pour superposer du texte sur une image. Vous devez installer NumPy et OpenCV.

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)
lineType               = 2

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

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

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

cv2.waitKey(0)
65
Vinay Vemula

Était CV_FONT_HERSHEY_SIMPLEX en cv (1)? Voici tout ce que j'ai disponible 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

Abandonner le 'CV_' semble fonctionner pour moi.

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

C'est en effet un problème 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 autocomplete (pyscripter ou scipy par exemple). Si vous recherchez un exemple de code, assurez-vous qu'ils utilisent la même version de Python (s'ils ne vous garantissent pas de modifier le code).

9
Roeffus

J'avais un problème similaire. Je suggérerais d’utiliser la bibliothèque PIL dans python car elle dessine le texte dans une police donnée, par rapport aux polices limitées dans OpenCV. Avec PIL, vous pouvez choisir n’importe quelle police installée sur votre ordinateur. 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)

result.png

6
DollarAkshay

Voici le code avec les étiquettes de paramètre

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)

Pour le nom de la police, veuillez voir une autre réponse dans ce fil.

Extrait de la réponse de @Roeffus

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

cv2.CV_FONT_HERSHEY_SIMPLEX et pour Python 3.x.x:

cv2.FONT_HERSHEY_SIMPLEX

Pour plus d'informations, consultez ceci http://www.programcreek.com/python/example/83399/cv2.putText

1
Ravinder Payal

pour l'exemple ci-dessus, la solution ressemblerait à ceci:

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()
0
bunkus