Cómo escribir texto en una imagen en windows usando python opencv2

Quiero poner un poco de texto en una imagen. Estoy escribiendo el código como:

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

Da ERROR, diciendo que el objeto ‘módulo’ no tiene atributo ‘CV_FONT_HERSHEY_SIMPLEX’

Consulta ¿No puedo usar el tipo de letra anterior? Busqué en Internet, pero solo encontré la syntax relacionada con Opencv C ++ para initFont. Entonces pensé en usar putText para pasar el tipo de fuente como parámetro. Pero no está funcionando para mí.

¿Alguna sugerencia?

Related of "Cómo escribir texto en una imagen en windows usando python opencv2"

Este código utiliza cv2.putText para superponer texto en una imagen. Necesitas NumPy y OpenCV instalados.

 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) 

¿ CV_FONT_HERSHEY_SIMPLEX en cv (1)? Aquí está todo lo que tengo disponible para 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 

Dejar caer el ‘CV_’ parece funcionar para mí.

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

Este es un problema un tanto molesto. Para Python 2.xx usas:

 cv2.CV_FONT_HERSHEY_SIMPLEX 

y para Python 3.xx:

 cv2.FONT_HERSHEY_SIMPLEX 

Recomiendo usar un entorno de autocompletado (pyscripter o scipy por ejemplo). Si busca código de ejemplo, asegúrese de que utilicen la misma versión de Python (si no se aseguran de que cambie el código).

Tuve un problema similar. Yo sugeriría usar la biblioteca PIL en python ya que dibuja el texto en cualquier fuente dada, en comparación con las fonts limitadas en OpenCV. Con PIL puede elegir cualquier fuente instalada en su sistema.

 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) 

resultado.png

Aquí está el código con tags de parámetros

 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) 

Para el nombre de la fuente, por favor vea otra respuesta en este hilo.

Extracto de la respuesta por @Roeffus

Este es un problema un tanto molesto. Para Python 2.xx usas:

cv2.CV_FONT_HERSHEY_SIMPLEX y para Python 3.xx:

cv2.FONT_HERSHEY_SIMPLEX

Para más información, consulte este http://www.programcreek.com/python/example/83399/cv2.putText

para el ejemplo anterior, la solución se vería así:

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