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