Método Python OpenCV | cv2.putText()

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

O OpenCV Python é uma biblioteca de links Python projetada para resolver problemas de visão computacional. O método cv2.putText () é usado para desenhar uma string de texto em qualquer imagem.

cv2 puttext

< td class="paramname">lineType = LINE_8,
void cv::putText ( InputOutputArray  img,
Cont String &  texto,
Ponto  org ,
int  fontFace,
double  fontScale,
< /td> Escalar  cor,
int  espessura = 1 ,
int 
bool  bottomLeftOrigin = false 
)

Sintaxe: cv2.putText(imagem, texto, org, fonte, fontScale, cor[, espessura[, lineType[, bottomLeftOrigin]]]) Parâmetros: image : É a imagem na qual o texto deve ser desenhado.

texto: sequência de texto a ser desenhada.

org: São as coordenadas do canto inferior esquerdo da string de texto na imagem. As coordenadas são representadas como tuplas de dois valores, ou seja (valor da coordenada X, valor da coordenada Y).

fonte: Indica o tipo de fonte. Alguns dos tipos de fonte são FONT_HERSHEY_SIMPLEX, FONT_HERSHEY_PLAIN, etc.

fontScale: fator de escala da fonte que é multiplicado pelo tamanho base específico da fonte.

color: É a cor da string de texto a ser desenhada. Para BGR, passamos uma tupla. por exemplo: (255, 0, 0) para cor azul.

espessura: É a espessura da linha em px.

lineType: Este é um parâmetro opcional. Dá o tipo de linha a ser usada.

bottomLeftOrigin: Este é um parâmetro opcional. Quando for verdadeiro, a origem dos dados da imagem está no canto inferior esquerdo. Caso contrário, fica no canto superior esquerdo.

Valor de retorno: retorna uma imagem.


Como escrever texto em uma imagem no Windows usando Python OpenCV2?

Pergunta do StackOverflow

Quero colocar algum texto em uma imagem. Estou escrevendo o código como:

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

Dá ERROR, dizendo que o objeto `module` não tem atributo `CV_FONT_HERSHEY_SIMPLEX`

Query Can` t Eu uso o tipo de fonte como acima? Procurei na internet, mas encontrei apenas a sintaxe relacionada ao Opencv C++ para initFont. Então pensei em usar putText para passar o tipo de fonte como parâmetro. Mas não está funcionando para mim.

Alguma sugestão?

Resposta:

Este código usa cv2.putText para sobrepor texto em uma imagem. Você precisa do NumPy e do OpenCV instalados.

import numpy as np import cv2 # Criar uma imagem preta  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) #Exibir a imagem cv2.imshow("img",img) #Salvar imagem cv2.imwrite("out.jpg", img) cv2.waitKey(0) 

Escreva texto no centro da imagem usando Python cv2.puttext

Se você conhece a forma (largura , height) do texto que você escreve na imagem, você pode colocá-lo no centro alinhado na imagem.

A forma aproximada do texto no exemplo a acima é (268, 36). Você pode precisar encontrar a forma de um texto específico usando o Paint ou algum outro aplicativo.

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, #numpy array no qual o texto é escrito "Exemplos Python", #posição do texto, #posição na qual a escrita deve começar cv2. FONT_HERSHEY_SIMPLEX, #font family 1, #font size (209, 80, 0, 255), #font color 3) #font stroke cv2.imwrite (`output.png`, imagem) 

Imagem de saída:

cv2 puttext

Python OpenCV puttext




cv2 put Exemplo de texto #

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 = (box[i][0], box[i][1]) p2 = (box[i][2], box[i][3]) cv2.rectangle(origimg, p1, p2, ( 0,255,0)) p3 = (max(p1[0], 15), max(p1[1], 15)) título = "%s:%.2f" % (COCO_CLASSES[int(cls[i])] , conf[i]) cv2.putText(origem, título, p3, cv2. FONT_ITALIC, 0.6, (0, 255, 0), 1) cv2.imshow("SSD", origimg) k = cv2.waitKey(0) & 0xff #Sair se ESC pressionado se k == 27: return False return True 

cv2.puttext Exemplo #

def drawBoundingBox(self,imgcv,result): for box in result: # print(box) x1,y1,x2,y2 = (box[` topleft`][`x`],box[`topleft`][`y`],box[`bottomright`][`x`],box[`bottomright`][`y`]) conf = box[` trust`] # print(conf) label = box[`label`] if conf < self.predictThresh: continue # print(x1,y1,x2,y2,conf,label) cv2.rectangle(imgcv,(x1,y1) ,(x2,y2),(0,255,0),6) labelSize=cv2.getTextSize(label,cv2. FONT_HERSHEY_COMPLEX,0.5,2) # print(`labelSize>>`,labelSize) _x1 = x1 _y1 = y1#+ int(labelSize[0][1]/2) _x2 = _x1+labelSize[0][0] _y2 = y1-int(labelSize[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 Exemplo #

def draw_labels(x, y, class_names=Nenhum): img = x.numpy() if img.ndim == 2 ou img.shape[2] == 1: img = cv2.cvtColor(img, cv2. COLOR_GRAY2BGR), classes = tf.split(y, (4, 1), axis=-1) classes = classes[..., 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(boxes)): x1y1 = tuple((np.array(boxes[i][0:2])) * wh).astype(np.int32)) x2y2 = tupla((np.array(boxes[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[classes[i]], x1y1, cv2. FONT_HERSHEY_COMPLEX_SMALL, font_size, (0, 0, 255), 1) else: img = cv2.putText(img, str(classes[i]), x1y1, cv2. FONT_HERSHEY_COMPLEX_SMALL, 1, (0, 0, 255), 1) return img 

cv2.puttext Exemplo #

def draw_outputs(img, outputs, class_names=None): boxes, objectness, classes = outputs #boxes, objectness, classes = boxes[0], objectness[0], classes[0] wh = np .flip(img.shape[0:2]) if img.ndim == 2 ou img.shape[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 = tuple((np.array(boxes[i][0:2]) * wh).astype(np.int32)) x2y2 = tupla((np.array(boxes[i][2:4]) * wh).astype(np.int32)) img = cv2.rectangle(img, x1y1, x2y2, (255, 0, 0), 1) img = cv2.putText(img, `{}`.format(int(classes[i])), x1y1, cv2. FONT_HERSHEY_COMPLEX_SMALL, font_size, (0, 0, 255), 1) return img 

cv2 puttext Exemplo #

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 = (box[i][0], box[i][1]) p2 = (box[i] ][2], box[i][3]) cv2.retangle(origem, p1, p2, (0,255,0)) p3 = (max(p1[0], 15), max(p1[1], 15 )) título = "%s:%.2f" % (CLASSES[int(cls[i])], conf[i]) cv2.putText(origem, título, p3, cv2. FONT_ITALIC, 0.6, (0, 255 , 0), 1) cv2.imshow("SSD", origimg) k = cv2.waitKey(0) & 0xff #Sair se ESC pressionado se k == 27: return False return True 

cv2. Exemplo puttext #

def draw_boxes_frame(frame, frame_size, boxes_dicts, class_names, input_size): """Desenha caixas detectadas em um quadro de vídeo""" boxes_dict = boxes_dicts[0] resize_factor = (frame_size[0] / input_size[1], frame_size[1] / inp ut_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) (test_width, text_height), baseline = cv2.getTextSize(class_names[cls], cv2. FONT_HERSHEY_SIMPLEX , 0,75, 1) cv2.rectangle(frame, (xy[0], xy[1]), (xy[0] + test_width, xy[1] - text_height - baseline), color[::-1], espessura =cv2. PREENCHIDO) cv2.putText(frame, class_names[cls], (xy[0], xy[1] - linha de base), cv2. FONT_HERSHEY_SIMPLEX, 0.75, (0, 0, 0), 1) 

cv2 puttext Exemplo #

def ProcessFrame(self, frame): # segment arm region segment = self.SegmentArm(frame) # faz uma cópia da imagem segmentada para desenhar em draw = cv2.cvtColor (segmento, cv2. COLOR_GRAY2RGB) # desenha alguns auxiliares para posicionar corretamente a mão 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) # encontra o casco da área segmentada , e com base nisso, encontre os # defeitos de convexidade [contours,defects] = self.FindHullDefects(segment) # detecta o número de dedos dependendo dos contornos e defeitos de convexidade # desenha defeitos que pertencem aos dedos verdes, outros vermelhos [sem dedos, desenhe ] = self.DetectNumberFingers(contornos, defeitos, desenho) # imprime o número de dedos na imagem cv2.putText(desenhar, str(sem dedos), (30,30), cv2. FONT_HERSHEY_SIMPLEX, 1, (255,255,255)) return draw 

cv2.puttext Exemplo #

def vis_class(img, pos, class_str, bg_color): """Visualiza a classe."" " font_color = cfg.VIS.SHOW_CLASS.COLOR font_scale = cfg.VIS.SHOW_CLASS.FONT_SCALE x0, y0 = int(pos[0]), int(pos[1]) # Calcula o tamanho do texto. txt = class_str fonte = cv2. FONT_HERSHEY_SIMPLEX ((txt_w, txt_h), _) = cv2.getTextSize(txt, font, font_scale, 1) # Coloca o fundo do 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) # Mostra o 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 Exemplo #

def plot_one_box(x, img, color=Nenhum, label=Nenhum, line_thickness=Nenhum): # Plota uma caixa delimitadora na imagem img tl = line_thickness ou round(0.002 * (img.shape[0] + img. shape[1]) / 2) + 1 # espessura da linha color = color ou [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, espessura=tl) if label: tf = max(tl - 1, 1) # espessura da fonte t_size = cv2.getTextSize(label, 0, fontScale=tl / 3, espessura=tf)[0] c2 = c1[0] + t_size[0], c1[1] - t_size[1] - 3 cv2.retangle(img, c1, c2, color, -1) # preenchido cv2.putText(img, label, (c1[0], c1[1] - 2), 0, tl / 3, [225, 255 , 255], espessura=tf, tipodelinha=cv2. LINE_AA) 

cv2.puttext Exemplo #

def vis_det_and_mask(im, class_name, dets, mask, thresh=0.8): """Depuração visual de detecções.""" num_dets = np.minimum(10, dets.shape[0]) colors_mask = random_colors(num_dets) colors_bbox = np.round(np.random.rand(num_dets, 3) * 255) # classifica rois de acordo com as coordenadas, desenha a bbox superior primeiro 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 ]) mask = mask[i,:,:] full_mask = unmold_mask(mask, bbox, im.shape) score = dets[i, -1] if score > thresh: 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], espessura=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), espessura=1) return im 

Esperamos que este artigo tenha ajudado você a resolver o problema. Além de Método Python OpenCV | cv2.putText(), confira outros tópicos relacionados a __del__.

Quer se destacar em Python? Veja nossa análise dosmelhores cursos on-line de Python 2022. Se você estiver interessado em Ciência de Dados, veja também como aprender programação em R.

A propósito, este material também está disponível em outros idiomas:



Ken Robinson

Paris | 2022-11-29

__del__ está tudo um pouco confuso 😭 Método Python OpenCV | cv2.putText() não é o único problema que eu encontrei. Verificado ontem, funciona!

Schneider OConnell

Abu Dhabi | 2022-11-29

De forma simples e clara. Obrigado por compartilhar. Método Python OpenCV | cv2.putText() e outras questões com flip sempre foi meu ponto fraco 😁. Verificado ontem, funciona!

Jan Williams

Milan | 2022-11-29

De forma simples e clara. Obrigado por compartilhar. Método Python OpenCV | cv2.putText() e outras questões com __del__ sempre foi meu ponto fraco 😁. Verificado ontem, funciona!

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

News


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