Méthode Python OpenCV | cv2.putText ()

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

OpenCV Python est une bibliothèque de liens Python conçue pour résoudre les problèmes de vision par ordinateur. La méthode cv2.putText () est utilisée pour dessiner une chaîne de texte sur n`importe quelle image.

cv2 puttext

< td class="paramname">lineType = LINE_8,
void cv::putText ( InputOutputArray  img,
const String &  texte,
Point  org ,
int  fontFace,
double  fontScale,
< /td> Scalaire couleur,
int  épaisseur = 1 ,
int 
bool  bottomLeftOrigin = false 
)

Syntaxe : cv2.putText(image, texte, org, police, fontScale, couleur[, épaisseur[, lineType[, bottomLeftOrigin]]]) Paramètres : image : C`est l`image sur laquelle le texte doit être dessiné.

text : Chaîne de texte à dessiner.

org : il s`agit des coordonnées du coin inférieur gauche de la chaîne de texte dans l`image. Les coordonnées sont représentées sous forme de tuples de deux valeurs, c`est-à-dire (valeur de coordonnée X, valeur de coordonnée Y).

police : indique le type de police. Certains des types de police sont FONT_HERSHEY_SIMPLEX, FONT_HERSHEY_PLAIN, , etc.

fontScale : facteur d`échelle de police multiplié par la taille de base spécifique à la police.

color : C`est la couleur de la chaîne de texte à dessiner. Pour BGR, nous passons un tuple. par exemple : (255, 0, 0) pour la couleur bleue.

épaisseur : C`est l`épaisseur de la ligne en px.

lineType : Ceci est un paramètre optionnel. Il donne le type de ligne à utiliser.

bottomLeftOrigin : Ceci est un paramètre optionnel. Lorsqu`il est vrai, l`origine des données d`image se trouve dans le coin inférieur gauche. Sinon, il se trouve dans le coin supérieur gauche.

Valeur de retour : il renvoie une image.


Comment écrire du texte sur une image dans Windows en utilisant Python OpenCV2 ?

Question StackOverflow

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

cv2.putText(image,"Bonjour le monde !!! ", (x,y), cv2. CV_FONT_HERSHEY_SIMPLEX, 2, 255) 

Il donne ERROR, indiquant que l`objet `module` n`a pas d`attribut `CV_FONT_HERSHEY_SIMPLEX`

Query Can` t J`utilise le type de police comme 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 paramètre. Mais cela ne fonctionne pas pour moi.

Des suggestions ?

Réponse :

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

import numpy as np import cv2 # Créer une image noire  img = np.zeros((512,512,3), np.uint8) # Écrivez du texte font = cv2. FONT_HERSHEY_SIMPLEX bottomLeftCornerOfText = (10,500) fontScale = 1 fontColor = (255,255,255) lineType = 2 cv2.putText(img,`Hello World ! `, bottomLeftCornerOfText, police , fontScale, fontColor, lineType) #Afficher l`image cv2.imshow("img",img) #Enregistrer l`image cv2.imwrite("out.jpg", img) cv2.waitKey(0) 

Écrivez du texte au centre de l`image en utilisant Python cv2.puttext

Si vous connaissez la forme (largeur , hauteur) du texte que vous écrivez sur l`image, vous pouvez le mettre au centre aligné sur l`image.

La forme approximative du texte dans l`exemple a ci-dessus est (268, 36). Vous devrez peut-être trouver la forme d`un texte spécifique à l`aide de Paint ou d`une autre application.

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, tableau #numpy sur lequel le texte est écrit "Exemples Python", # position du texte, # position à laquelle l`écriture doit commencer cv2. FONT_HERSHEY_SIMPLEX, # famille de polices 1, # taille de police (209, 80, 0, 255), # couleur de police 3) # trait de police cv2.imwrite (`output.png`, image) 

Image de sortie :

cv2 puttext

Python OpenCV puttext




cv2 mettre text Exemple #

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 = (boite[i][0], boite[i][1]) p2 = (boite[i][2], boite[i][3]) cv2.rectangle(origine, p1, p2, ( 0,255,0)) p3 = (max(p1[0], 15), max(p1[1], 15)) titre = "%s:%.2f" % (COCO_CLASSES[int(cls[i])] , conf[i]) cv2.putText(origine, titre, p3, cv2. FONT_ITALIC, 0.6, (0, 255, 0), 1) cv2.imshow("SSD", origimg) k = cv2.waitKey(0) & 0xff #Sortie si ESC appuyé si k == 27 : return False return True 

cv2.puttext Exemple #

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[` confiance`] # 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 

exemple de puttext cv2 #

def draw_labels(x, y, class_names=None) : img = x.numpy() if img.ndim == 2 ou img.shape[2] == 1 : img = cv2.cvtColor(img, cv2. COLOR_GRAY2BGR) boîtes, classes = tf.split(y, (4, 1), axe=-1) classes = classes[..., 0] wh = np.flip(img.shape[0:2]) min_wh = np.amin(wh) si min_wh <= 100 : font_size = 0.5 sinon : font_size = 1 for i in range(len(boxes)) : x1y1 = tuple((np.array(boxes[i][0:2]) * wh).astype(np.int32)) x2y2 = tuple((np.array(boxes[i][2:4]) * wh).astype(np.int32)) img = cv2.rectangle(img, x1y1 , x2y2, (255, 0, 0), 1) si class_names : img = cv2.putText(img, class_names[classes[i]], x1y1, cv2. FONT_HERSHEY_COMPLEX_SMALL, font_size, (0, 0, 255), 1) sinon : img = cv2.putText(img, str(classes[i]), x1y1, cv2. FONT_HERSHEY_COMPLEX_SMALL, 1, (0, 0, 255), 1) return img 

cv2.puttext Example #

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]) si img.ndim == 2 ou img.shape[2] == 1 : img = cv2.cvtColor(img, cv2. COLOR_GRAY2BGR) min_wh = np.amin(wh) si min_wh <= 100 : font_size = 0.5 sinon : font_size = 1 for i in range(classes.shape[0]): x1y1 = tuple((np.array(boxes[i][0:2]) * wh).astype(np.int32)) x2y2 = tuple((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 Example #

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(origine, p1, p2, (0,255,0)) p3 = (max(p1[0], 15), max(p1[1], 15 )) title = "%s:%.2f" % (CLASSES[int(cls[i])], conf[i]) cv2.putText(origimg, title, p3, cv2. FONT_ITALIC, 0.6, (0, 255 , 0), 1) cv2.imshow("SSD", origimg) k = cv2.waitKey(0) & 0xff #Sortie si ESC appuyé si k == 27 : renvoie Faux renvoie Vrai 

cv2. puttext Example #

def draw_boxes_frame(frame, frame_size, boxes_dicts, class_names, input_size): """Dessine les boîtes détectées dans une image vidéo""" boxes_dict = boxes_dicts[0] resize_factor = (frame_size[0] / taille_entrée[1], taille_cadre[1] / entrée ut_size[0]) for cls in range(len(class_names)): boxes = boxes_dict[cls] color = (0, 0, 255) if np.size(boxes) ! = 0 : pour boîte dans boîtes : xy = boîte[: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], épaisseur =cv2. FILLED) cv2.putText(frame, class_names[cls], (xy[0], xy[1] - ligne de base), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 0, 0), 1) 

cv2 puttext Example #

def ProcessFrame(self, frame): # segment arm region segment = self.SegmentArm(frame) # faire une copie de l`image segmentée à dessiner sur draw = cv2.cvtColor (segment, cv2. COLOR_GRAY2RGB) # dessiner des aides pour placer correctement la main 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) # trouve l`enveloppe de la zone segmentée , et sur cette base trouver les # défauts de convexité [contours, défauts] = self.FindHullDefects(segment) # détecter le nombre de doigts en fonction des contours et des défauts de convexité # dessiner les défauts qui appartiennent aux doigts verts, les autres rouges [nofingers, draw ] = self.DetectNumberFingers(contours, defauts, draw) # affiche le nombre de doigts sur l`image cv2.putText(draw, str(nofingers), (30,30), cv2. FONT_HERSHEY_SIMPLEX, 1, (255,255,255)) return draw 

cv2.puttext Example #

def vis_class(img, pos, class_str, bg_color): """Visualise la classe."" " font_color = cfg.VIS.SHOW_CLASS.COLOR font_scale = cfg.VIS.SHOW_CLASS.FONT_SCALE x0, y0 = int(pos[0]), int(pos[1]) # Calcule la taille du texte. txt = class_str police = cv2. FONT_HERSHEY_SIMPLEX ((txt_w, txt_h), _) = cv2.getTextSize(txt, font, font_scale, 1) # Placer l`arrière-plan du texte. 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) # Afficher le texte. 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 Example #

def plot_one_box(x, img, color=None, label=None, line_thickness=None): # Trace une boîte englobante sur l`image img tl = line_thickness or round(0.002 * (img.shape[0] + img. forme[1]) / 2) + 1 # épaisseur de ligne couleur = couleur 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, couleur, épaisseur=tl) si étiquette : tf = max(tl - 1, 1) # épaisseur de la police 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) # rempli cv2.putText(img, label, (c1[0], c1[1] - 2), 0, tl / 3, [225, 255 , 255], épaisseur=tf, lineType=cv2. LINE_AA) 

cv2.puttext Exemple #

def vis_det_and_mask(im, class_name, dets, masques, thresh=0.8): """Débogage visuel des détections.""" 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) # trier les rois en fonction des coordonnées, dessiner la bbox supérieure en premier 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 = masques[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], épaisseur=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), épaisseur=1) return im 

Nous espérons que cet article vous a aidé à résoudre le problème. Outre Méthode Python OpenCV | cv2.putText (), consultez d'autres sujets liés à __del__.

Vous voulez exceller en Python? Consultez notre examen des meilleurs cours en ligne Python 2022. Si vous êtes intéressé par la science des données, découvrez également comment apprendre la programmation en R.

Au fait, ce matériel est également disponible dans d'autres langues:



Angelo Galleotti

Singapore | 2022-11-29

Peut-être y a-t-il d'autres réponses ? Qu'est-ce que le Méthode Python OpenCV | cv2.putText () signifie exactement ?. Vérifié hier, ça marche !

Carlo Gonzalez

New York | 2022-11-29

cvtcolor est tout un peu confus 😭 Méthode Python OpenCV | cv2.putText () n'est pas le seul problème que j'ai rencontré. Je ne suis pas sûr que ce soit la meilleure méthode

Manuel Jackson

Warsaw | 2022-11-29

imwrite est tout un peu confus 😭 Méthode Python OpenCV | cv2.putText () n'est pas le seul problème que j'ai rencontré. Vérifié hier, ça marche !

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