Método Python OpenCV | cv2.putText()

| | | | | | | | | | | | | | | |

OpenCV Python es una biblioteca de enlaces de Python diseñada para resolver problemas de visión artificial. El método cv2.putText () se usa para dibujar una cadena de texto en cualquier imagen.

cv2 puttext

< td class="paramname">tipo de línea = LINE_8,

Sintaxis: cv2.putText(image, text, org, font, fontScale, color[, thick[, lineType[, bottomLeftOrigin]]]) Parámetros: image : Es la imagen sobre la que se va a dibujar el texto.

texto: Cadena de texto a dibujar.

org: Son las coordenadas de la esquina inferior izquierda de la cadena de texto en la imagen. Las coordenadas se representan como tuplas de dos valores, es decir (valor de la coordenada X, valor de la coordenada Y).

fuente: Denota el tipo de fuente. Algunos tipos de fuente son FONT_HERSHEY_SIMPLEX, FONT_HERSHEY_PLAIN, etc.

fontScale: factor de escala de fuente que se multiplica por el tamaño base específico de la fuente.

color: Es el color de la cadena de texto a dibujar. Para BGR, pasamos una tupla. ej.: (255, 0, 0) para el color azul.

grosor: Es el grosor de la línea en px.

tipo de línea: Este es un parámetro opcional. Da el tipo de línea a utilizar.

bottomLeftOrigin: Este es un parámetro opcional. Cuando es verdadero, el origen de los datos de la imagen está en la esquina inferior izquierda. De lo contrario, se encuentra en la esquina superior izquierda.

Valor devuelto: Devuelve una imagen.


¿Cómo escribir texto en una imagen en Windows usando Python OpenCV2?

Pregunta de StackOverflow

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

cv2.putText(image,"¡¡Hola mundo!!!", (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 Can` ¿Utilizo el tipo de fuente como se indica arriba? Busqué en Internet, pero solo encontré la sintaxis relacionada con Opencv C++ para initFont. Luego pensé en usar putText para pasar el tipo de fuente como parámetro. Pero no me funciona.

¿Alguna sugerencia?

Respuesta:

Este código usa cv2.putText para superponer texto en una imagen. Necesita tener NumPy y OpenCV instalados.

importar numpy as np import cv2 # Crear una imagen negra  img = np.zeros((512,512,3), np.uint8) # Escribe algo de texto font = cv2.FONT_HERSHEY_SIMPLEX bottomLeftCornerOfText = ( 10,500) fontScale = 1 fontColor = (255,255,255) lineType = 2 cv2.putText(img,`¡Hola mundo!`, bottomLeftCornerOfText, font, fontScale, fontColor, lineType) #Mostrar la imagen cv2.imshow("img",img) #Guardar imagen cv2.imwrite ("out.jpg", img) cv2.waitKey(0) 

Escribe texto en el centro de la imagen usando Python cv2.puttext

Si conoces la forma (ancho, alto) del texto que escribes en la imagen, puedes ponerlo en el centro alineado en la imagen.

La forma aproximada del texto en el ejemplo anterior es (268, 36). Es posible que deba encontrar la forma de un texto específico usando Paint o alguna otra aplicación.

import numpy as np import cv2 image = cv2.imread(`sample.png`,cv2.IMREAD_UNCHANGED) position = ( (int) (image.shape[1]/2 - 268/2), (int) (image.shape[0]/2 - 36/2)) cv2.putText( image, #matriz numpy en la que se escribe el texto "Ejemplos de Python", #posición del texto, #posición en la que debe comenzar la escritura cv2.FONT_HERSHEY_SIMPLEX, #familia de fuentes 1, #tamaño de fuente (209, 80, 0, 255), #color de fuente 3) #trazo de fuente cv2.imwrite (`output.png`, imagen) 

Imagen de salida:

cv2 puttext

Python OpenCV puttext




putte cv2 xt Ejemplo #

def detect(imgfile): origimg = cv2.imread(imgfile) img = preprocess(origimg) img = img.astype(np.float32) img = img.transpose((2, 0 , 1)) net.blobs[`data`].data[...] = img out = net.forward() box, conf, cls = postprocess(origimg, out) for i in range(len(box)) : p1 = (caja[i][0], caja[i][1]) p2 = (caja[i][2], caja[i][3]) cv2.rectangle(origimg, p1, p2, ( 0,255,0)) p3 = (max(p1[0], 15), max(p1[1], 15)) title = "%s:%.2f" % (COCO_CLASSES[int(cls[i])] , conf[i]) cv2.putText(origimg, título, p3, cv2.FONT_ITALIC, 0.6, (0, 255, 0), 1) cv2.imshow("SSD", origimg) k = cv2.waitKey(0) & 0xff #Salir si se presiona ESC si k == 27: devuelve Falso devuelve Verdadero 

cv2.puttext Ejemplo #

def drawBoundingBox(self,imgcv,result): for box in result : # print(caja) x1,y1,x2,y2 = (caja[`arriba a la izquierda`][`x`],caja[`arriba a la izquierda`][`y`],caja[`abajo a la derecha`][`x`] ,box[`bottomright`][`y`]) conf = box[`confidence`] # print(conf) label = box[`label`] if conf < self.predictThresh: continue # print(x1,y1,x2 ,y2,conf, etiqueta) cv2.rectangle(imgcv,(x1,y1),(x2,y2),(0,255,0),6) labelSize=cv2.getTextSize(label,cv2.FONT_HERSHEY_COMPLEX,0.5,2) # print(`labelSize> >`,tamañoetiqueta) _x1 = x1 _y1 = y1#+int(tamañoetiqueta[0][1]/2) _x2 = _x1+tamañoetiqueta[0][0] _y2 = y1-int(tamañoetiqueta[0][1]) cv2.rectangle(imgcv,(_x1,_y1),(_x2,_y2),(0,255,0),cv2.FILLED) cv2.putText(imgcv,label,(x1,y1),cv2.FONT_HERSHEY_COMPLEX,0.5,(0 ,0,0),1) return imgcv 

cv2 puttext Ejemplo #

def draw_labels(x, y, class_names=Ninguno): img = x.numpy() if img. ndim == 2 o img.shape[2] == 1: img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR) cajas, clases = tf.split(y, (4, 1), eje=-1) clases = clases[..., 0] wh = np.flip(img.shape[0:2]) min_wh = np.amin(wh) if min_wh <= 100: font_size = 0.5 else: font_size = 1 for i in range( len(cajas)): x1y1 = tupla((np.array(cajas[i][0:2]) * wh).astype(np.int32)) x2y2 = tupla((np.array(cajas[i][ 2:4]) * wh).astype(np.int32)) img = cv2.rectangle(img, x1y1, x2y2, (255, 0, 0), 1) if class_names: img = cv2.putText(img, class_names[clases[i]], x1y1, cv2.FONT_HERSHEY_COMPLEX_SMALL, font_size, (0, 0, 255), 1) else: img = cv2.putText(img, str(clases[i]), x1y1, cv2.FONT_HERSHEY_COMPLEX_SMALL, 1, (0, 0, 255), 1) return img 

cv2.puttext Ejemplo #

def draw_outputs(img, outputs, class_names=None): cajas, objetividad, clases = genera #cajas, objetividad, clases = cajas[0], objetividad[0], clases[0] wh = np.flip(img.forma[0:2]) if img.ndim == 2 o img.forma[ 2] == 1: img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR) min_wh = np.amin(wh) if min_wh <= 100: font_size = 0.5 else: font_size = 1 for i in range(classes.shape[0 ]): x1y1 = tupla((np.array(cajas[i][0:2]) * wh).astype(np.int32)) x2y2 = tupla((np.array(cajas[i][2:4 ]) * wh).astype(np.int32)) img = cv2.rectangle(img, x1y1, x2y2, (255, 0, 0), 1) img = cv2.putText(img, `{}`.format( int(clases[i])), x1y1, cv2.FONT_HERSHEY_COMPLEX_SMALL, font_size, (0, 0, 255), 1) return img 

cv2 puttext Ejemplo #

def detect( archivo img): origen = cv2.imread(imgfile) img = preprocesar(origimg) img = img.astype(np.float32) img = img.transpose((2, 0, 1)) net.blobs[`data`].data[.. .] = img out = net.forward() box, conf, cls = postprocess(origimg, out) for i in range(len(box)): p1 = (box[i][0], box[i][ 1]) p2 = (caja[i][2], caja[i][3]) cv2.rectangle(origimg, p1, p2, (0,255,0)) p3 = (max(p1[0], 15) , max(p1[1], 15)) título = "%s:%.2f" % (CLASES[int(cls[i])], conf[i]) cv2.putText(origimg, título, p3, cv2 .FONT_ITALIC, 0.6, (0, 255, 0), 1) cv2.imshow("SSD", origimg) k = cv2.waitKey(0) & 0xff #Salir si se presiona ESC si k == 27: return False return True 

cv2.puttext Ejemplo #

def draw_boxes_frame(frame, frame_size, boxes_dicts, class_names, input_size): """Dibuja cuadros detectados en un cuadro de video""" boxes_dict = boxes_dicts[ 0] resize_factor = (frame_size[0] / input_size[1], frame_size[1] / input_size[0]) for cls in range(len(class_names)): boxes = boxes_dict[cls] color = (0, 0, 255 ) if np.size(boxes) != 0: for box in boxes: xy = box[:4] xy = [int(xy[i] * resize_factor[i % 2]) for i in range(4)] cv2.rectangle(frame, (xy[0], xy[1]), (xy [2], xy[3]), color[::-1], 2) (prueba_ancho, texto_alto), línea de base = cv2.getTextSize(class_names[cls], cv2.FONT_HERSHEY_SIMPLEX, 0.75, 1) cv2.rectangle(frame , (xy[0], xy[1]), (xy[0] + ancho_prueba, xy[1] - altura_texto - línea base), color[::-1], grosor=cv2.LLENADO) cv2.putText(marco , class_names[cls], (xy[0], xy[1] - línea base), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 0, 0), 1) 

cv2 puttext Ejemplo #

def ProcessFrame(self, frame): # segment arm region segment = self.SegmentArm(frame) # hacer una copia de la imagen segmentada para dibujar en draw = cv2.cvtColor(segment, cv2.COLOR_GRAY2RGB) # dibujar algo ayudantes para colocar correctamente la mano cv2.circle(draw,(self.imgWidth/2,self.imgHeight/2),3,[255,102,0],2) cv2.rectangle(draw, (self.imgWidth/3,self. imgHeight/3), (self.imgWidth*2/3, self.imgHeight*2/3), [255,102,0],2) # encuentra el casco del área segmentada, y en base a eso encuentra el # c defectos de convexidad [contornos, defectos] = self.FindHullDefects(segmento) # detectar el número de dedos en función de los contornos y defectos de convexidad # dibujar defectos que pertenecen a los dedos verdes, otros rojos [sin dedos, dibujar] = self.DetectNumberFingers (contornos, defectos, dibujar) # imprimir el número de dedos en la imagen cv2.putText(dibujar, str(sindedos), (30,30), cv2.FONT_HERSHEY_SIMPLEX, 1, (255,255,255)) volver dibujar 

cv2.puttext Ejemplo #

def vis_class(img, pos, class_str, bg_color): """Visualiza la clase.""" font_color = cfg.VIS.SHOW_CLASS.COLOR font_scale = cfg.VIS.SHOW_CLASS.FONT_SCALE x0 , y0 = int(pos[0]), int(pos[1]) # Calcula el tamaño del texto. txt = class_str font = cv2.FONT_HERSHEY_SIMPLEX ((txt_w, txt_h), _) = cv2.getTextSize(txt, font, font_scale, 1) # Coloque el fondo del texto. back_tl = x0, y0 - int(1.3 * txt_h) back_br = x0 + txt_w, y0 cv2.rectangle(img, back_tl, back_br, bg_color, -1) # Mostrar texto. txt_tl = x0, y0 - int(0.3 * txt_h) cv2.putText(img, txt, txt_tl, font, font_scale, font_color, lineType=cv2.LINE_AA) return img 

cv2 puttext Ejemplo #

def plot_one_box(x, img, color=Ninguno, label=Ninguno, line_thickness=Ninguno): # Traza un cuadro delimitador en la imagen img tl = line_thickness o round(0.002 * (img.shape[0] + img. forma[1]) / 2) + 1 # grosor de línea color = color o [random.randint(0, 255) for _ in range(3)] c1, c2 = (int(x[0]), int(x [1])), (int(x[2]), int(x[3])) cv2.rectangle(img, c1, c2, color, grosor=tl) if etiqueta: tf = max(tl - 1, 1) # grosor de fuente t_size = cv2.getTextSize(label, 0, fontScale=tl / 3, thick=tf)[0] c2 = c1[0] + t_size[0], c1[1] - t_size[1] - 3 cv2.rectangle(img, c1, c2, color, -1) # relleno cv2.putText(img, etiqueta, (c1[0], c1[1] - 2), 0, tl / 3, [225, 255 , 255], thick=tf, lineType=cv2.LINE_AA) 

cv2.puttext Example #

def vis_det_and_mask(im, class_name, dets, masks, thresh=0.8): " ""Depuración visual de detecciones"."" n um_dets = np.minimum(10, dets.shape[0]) colors_mask = random_colors(num_dets) colors_bbox = np.round(np.random.rand(num_dets, 3) * 255) # ordenar rois según las coordenadas, dibujar superior bbox first draw_mask = np.zeros(im.shape[:2], dtype=np.uint8) for i in range(1): bbox = tuple(int(np.round(x)) for x in dets[i, :4]) máscara = máscaras[i,:,:] máscara_completa = desmold_mask(máscara, bbox, im.shape) puntaje = dets[i, -1] si puntaje > umbral: word_width = len(class_name) cv2.rectangle( im, bbox[0:2], bbox[2:4], colors_bbox[i], 2) cv2.rectangle(im, bbox[0:2], (bbox[0] + 18 + word_width*8, bbox[ 1]+15), colors_bbox[i], thick=cv2.FILLED) apply_mask(im, full_mask, draw_mask, colors_mask[i], 0.5) draw_mask += full_mask cv2.putText(im, `%s` % (class_name) , (bbox[0]+5, bbox[1] + 12), cv2.FONT_HERSHEY_PLAIN, 1.0, (255,255,255), grosor=1) volver im 

Esperamos que este artículo le haya ayudado a resolver el problema. Además de Método Python OpenCV | cv2.putText(), consulta otros temas relacionados con __del__.

¿Quiere sobresalir en Python? Consulte nuestra reseña de los mejores cursos en línea de Python 2022. Si está interesado en Data Science, consulte también cómo aprender programación en R.

Por cierto, este material también está disponible en otros idiomas:



Javier Ungerschaft

Tallinn | 2022-11-29

resize es todo un poco confuso 😭 Método Python OpenCV | cv2.putText() no es el único problema que encontré. Volveré mañana con comentarios

Manuel Krasiko

Massachussetts | 2022-11-29

¿Tal vez haya otras respuestas? ¿Qué significa el Método Python OpenCV | cv2.putText() significa exactamente?. Lo usare en mi tesis de licenciatura

Schneider Ungerschaft

Vigrinia | 2022-11-29

Me estaba preparando para mi entrevista de codificación, gracias por aclarar esto - Método Python OpenCV | cv2.putText() en Python no es el más simple. Solo espero que eso no vuelva a surgir

Shop

Learn programming in R: courses

$

Best Python online courses for 2022

$

Best laptop for Fortnite

$

Best laptop for Excel

$

Best laptop for Solidworks

$

Best laptop for Roblox

$

Best computer for crypto mining

$

Best laptop for Sims 4

$

Latest questions

NUMPYNUMPY

Common xlabel/ylabel for matplotlib subplots

12 answers

NUMPYNUMPY

How to specify multiple return types using type-hints

12 answers

NUMPYNUMPY

Why do I get "Pickle - EOFError: Ran out of input" reading an empty file?

12 answers

NUMPYNUMPY

Flake8: Ignore specific warning for entire file

12 answers

NUMPYNUMPY

glob exclude pattern

12 answers

NUMPYNUMPY

How to avoid HTTP error 429 (Too Many Requests) python

12 answers

NUMPYNUMPY

Python CSV error: line contains NULL byte

12 answers

NUMPYNUMPY

csv.Error: iterator should return strings, not bytes

12 answers


Wiki

Python | How to copy data from one Excel sheet to another

Common xlabel/ylabel for matplotlib subplots

Check if one list is a subset of another in Python

sin

How to specify multiple return types using type-hints

exp

Printing words vertically in Python

exp

Python Extract words from a given string

Cyclic redundancy check in Python

Finding mean, median, mode in Python without libraries

cos

Python add suffix / add prefix to strings in a list

Why do I get "Pickle - EOFError: Ran out of input" reading an empty file?

Python - Move item to the end of the list

Python - Print list vertically

void cv::putText ( InputOutputArray  img,
const String &  texto,
Punto  org ,
int  fontFace,
double  fontScale,
< /td> Escalar  color,
int  grosor = 1 ,
int 
bool  bottomLeftOrigin = false 
)