Python OpenCV-methode | cv2.putText()

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

OpenCV Python is een Python-linkbibliotheek die is ontworpen om computervisieproblemen op te lossen. De methode cv2.putText () wordt gebruikt om een tekenreeks op een afbeelding te tekenen.

cv2 puttext

< td class="paramname">lineType = LINE_8,
void cv::putText ( InputOutputArray  img,
const String &  tekst,
Punt  org ,
int  fontFace,
double  fontScale,
< /td> Scalar  kleur,
int  dikte = 1 ,
int 
bool  bottomLeftOrigin = false 
)

Syntaxis: cv2.putText(image, text, org, font, fontScale, color[, dikte[, lineType[, bottomLeftOrigin]]]) Parameters: image : dit is de afbeelding waarop tekst moet worden getekend.

tekst: tekenreeks die moet worden getekend.

org: Dit zijn de coördinaten van de linkerbenedenhoek van de tekstreeks in de afbeelding. De coördinaten worden weergegeven als tupels van twee waarden, namelijk (X-coördinaatwaarde, Y-coördinaatwaarde).

font: dit geeft het lettertype aan. Sommige lettertypen zijn FONT_HERSHEY_SIMPLEX, FONT_HERSHEY_PLAIN, enz.

fontScale: Lettertypeschaalfactor die wordt vermenigvuldigd met de lettertypespecifieke basisgrootte.

kleur: dit is de kleur van de tekenreeks die moet worden getekend. Voor BGR passeren we een tuple. bijv.: (255, 0, 0) voor blauwe kleur.

dikte: dit is de dikte van de lijn in px.

lineType: Dit is een optionele parameter. Het geeft het type regel aan dat moet worden gebruikt.

bottomLeftOrigin: Dit is een optionele parameter. Als het waar is, bevindt de oorsprong van de afbeeldingsgegevens zich in de linkerbenedenhoek. Anders staat het in de linkerbovenhoek.

Retourwaarde: het retourneert een afbeelding.


Hoe schrijf ik tekst op een afbeelding in Windows met Python OpenCV2?

StackOverflow-vraag

Ik wil wat tekst op een afbeelding. Ik schrijf de code als:

cv2.putText(image,"Hallo wereld!!!", (x,y), cv2.CV_FONT_HERSHEY_SIMPLEX, 2, 255) 

Het geeft ERROR, zeggende dat `module` object geen attribuut heeft `CV_FONT_HERSHEY_SIMPLEX`

Query Can` t Ik gebruik het lettertype zoals hierboven? Ik zocht op internet, maar vond alleen de syntaxis met betrekking tot Opencv C++ voor initFont. Toen dacht ik eraan om putText te gebruiken om het lettertype als parameter door te geven. Maar het werkt niet voor mij.

Heeft u suggesties?

Antwoord:

Deze code gebruikt cv2.putText om tekst op een afbeelding te plaatsen. U moet NumPy en OpenCV geïnstalleerd hebben.

import numpy as np import cv2 # Maak een zwarte afbeelding  img = np.zeros((512,512,3), np.uint8) # Schrijf wat tekst font = cv2.FONT_HERSHEY_SIMPLEX bottomLeftCornerOfText = ( 10,500) fontScale = 1 fontColor = (255,255,255) lineType = 2 cv2.putText(img,`Hallo wereld!`, bottomLeftCornerOfText, font, fontScale, fontColor, lineType) #Display de afbeelding cv2.imshow("img",img) #Afbeelding opslaan cv2.imwrite ("out.jpg", img) cv2.waitKey(0) 

Schrijf tekst in het midden van de afbeelding met Python cv2.puttext

Als u de vorm (breedte, hoogte) kent van de tekst die u op de afbeelding schrijft, kunt u deze in het midden plaatsen uitgelijnd op de afbeelding.

De vorm van de tekst in het bovenstaande voorbeeld is ongeveer (268, 36). Mogelijk moet u de vorm van een specifieke tekst vinden met Paint of een andere toepassing.

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 waarop tekst is geschreven "Python-voorbeelden", #tekstpositie, #positie waarop schrijven moet beginnen cv2.FONT_HERSHEY_SIMPLEX, #lettertypefamilie 1, #lettergrootte (209, 80, 0, 255), #lettertypekleur 3) #lettertypestreek cv2.imwrite (`output.png`, afbeelding) 

Uitvoer afbeelding:

cv2 puttext

Python OpenCV puttext




cv2 putte xt Voorbeeld #

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 = (doos[i][0], doos[i][1]) p2 = (doos[i][2], doos[i][3]) cv2.rechthoek(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, titel, p3, cv2.FONT_ITALIC, 0.6, (0, 255, 0), 1) cv2.imshow("SSD", origimg) k = cv2.waitKey(0) & 0xff #Exit als ESC wordt ingedrukt als k == 27: return False return True 

cv2.puttext Voorbeeld #

def drawBoundingBox(self,imgcv,result): voor box in resultaat : # 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.rechthoek(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 Voorbeeld #

def draw_labels(x, y, class_names=None): img = x.numpy() if img. ndim == 2 of img.shape[2] == 1: img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR) vakken, klassen = tf.split(y, (4, 1), axis=-1) klassen = klassen[..., 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 = tuple((np.array(boxes[i][ 2:4]) * wh).astype(np.int32)) img = cv2.rechthoek(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 Voorbeeld #

def draw_outputs(img, outputs, class_names=None): boxes, objectness, classes = output #boxes, objectness, classes = boxes[0], objectness[0], classes[0] wh = np.flip(img.shape[0:2]) als img.ndim == 2 of 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 = tuple((np.array(boxes[i][2:4 ]) * wh).astype(np.int32)) img = cv2.rechthoek(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 Voorbeeld #

def detect( imgbestand): origimg = cv2.imread(imgbestand) 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 = (doos[i][2], doos[i][3]) cv2.rechthoek(origimg, 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 #Exit als ESC wordt ingedrukt als k == 27: return False return True 

cv2.puttext Voorbeeld #

def draw_boxes_frame(frame, frame_size, boxes_dicts, class_names, input_size): """Teken gedetecteerde dozen in een videoframe""" boxes_dict = boxes_dicts[ 0] resize_factor = (frame_size[0] / input_size[1], frame_size[1] / input_size[0]) voor cls in range(len(class_names)): boxes = boxes_dict[cls] color = (0, 0, 255 ) if np.size(boxes) != 0: voor box in boxen: 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]), kleur[::-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), kleur[::-1], dikte=cv2.FILLED) cv2.putText(frame , class_names[cls], (xy[0], xy[1] - baseline), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 0, 0), 1) 

cv2 puttext Voorbeeld #

def ProcessFrame(self, frame): # segment arm region segment = self.SegmentArm(frame) # maak een kopie van de gesegmenteerde afbeelding om op draw te tekenen = cv2.cvtColor(segment, cv2.COLOR_GRAY2RGB) # draw some helpers voor het correct plaatsen van de hand 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) # zoek de romp van het gesegmenteerde gebied en vind op basis daarvan de # c onvexiteitsdefecten [contouren,defecten] = self.FindHullDefects(segment) # detecteer het aantal vingers afhankelijk van de contouren en convexiteitsdefecten # teken defecten die bij groene vingers horen, andere rood [nofingers,draw] = zelf.DetectNumberFingers(contours, defecten, draw) # print aantal vingers op afbeelding cv2.putText(draw, str(nofingers), (30,30), cv2.FONT_HERSHEY_SIMPLEX, 1, (255,255,255)) return draw 

cv2.puttext Voorbeeld #

def vis_class(img, pos, class_str, bg_color): """Visualiseert de klas.""" font_color = cfg.VIS.SHOW_CLASS.COLOR font_scale = cfg.VIS.SHOW_CLASS.FONT_SCALE x0 , y0 = int(pos[0]), int(pos[1]) # Bereken tekstgrootte. txt = class_str font = cv2.FONT_HERSHEY_SIMPLEX ((txt_w, txt_h), _) = cv2.getTextSize(txt, font, font_scale, 1) # Plaats tekstachtergrond. 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) # Toon tekst. 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 Voorbeeld #

def plot_one_box(x, img, color=None, label=None, line_thickness=None): # Tekent één begrenzingsvak op afbeelding img tl = line_thickness of round(0.002 * (img.shape[0] + img. vorm [1]) / 2) + 1 # lijndikte kleur = kleur of [random.randint(0, 255) voor _ in bereik(3)] c1, c2 = (int(x[0]), int(x [1])), (int(x[2]), int(x[3])) cv2.rectangle(img, c1, c2, kleur, dikte=tl) if label: tf = max(tl - 1, 1) # fontdikte t_size = cv2.getTextSize(label, 0, fontScale=tl / 3, dikte=tf)[0] c2 = c1[0] + t_size[0], c1[1] - t_size[1] - 3 cv2.rectangle(img, c1, c2, kleur, -1) # gevuld cv2.putText(img, label, (c1[0], c1[1] - 2), 0, tl / 3, [225, 255 , 255], dikte=tf, lineType=cv2.LINE_AA) 

cv2.puttext Voorbeeld #

def vis_det_and_mask(im, class_name, dets, masks, thresh=0.8): " ""Visuele foutopsporing van detecties.""" 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) # sorteer rois volgens de coördinaten, teken naar boven 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]) mask = masks[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], dikte=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), dikte=1) return im 

We hopen dat dit artikel u heeft geholpen om het probleem op te lossen. Bekijk naast Python OpenCV-methode | cv2.putText() ook andere __del__-gerelateerde onderwerpen.

Wilt u uitblinken in Python? Bekijk onze recensie van de  beste online Python-cursussen 2022. Als je geïnteresseerd bent in Data Science, bekijk dan ook hoe je programmeert in R.

Trouwens, dit materiaal is ook beschikbaar in andere talen:



Javier Wu

Prague | 2022-11-29

Bedankt voor de uitleg! Ik zat vast met Python OpenCV-methode | cv2.putText() voor enkele uren, eindelijk heb ik het voor elkaar 🤗. Zal het gebruiken in mijn bachelorscriptie

Xu Gonzalez

Rome | 2022-11-29

Ik was me aan het voorbereiden op mijn coderingsinterview, bedankt voor de verduidelijking - Python OpenCV-methode | cv2.putText() in Python is niet de eenvoudigste. Gisteren gecontroleerd, het werkt!

Anna Krasiko

Moscow | 2022-11-29

Simpel gezegd en duidelijk. Bedankt voor het delen. Python OpenCV-methode | cv2.putText() en andere zaken met opencv puttext was altijd mijn zwakke punt 😁. Ik weet alleen niet zeker of dit de beste methode is

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