Python OpenCV | cv2.putText () Methode

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

OpenCV Python ist eine Python-Linkbibliothek, die entwickelt wurde, um Computer-Vision-Probleme zu lösen. Die Methode cv2.putText () wird verwendet, um eine Textzeichenfolge auf ein beliebiges Bild zu zeichnen.

cv2 puttext

< td class="paramname">lineType = LINE_8,
void cv::putText ( InputOutputArray  img,
const String &  text,
Punkt  org ,
int  fontFace,
double  fontScale,
< /td> Skalar  Farbe,
int  Dicke = 1 ,
int 
bool  bottomLeftOrigin = false 
)

Syntax: cv2.putText(image, text, org, font, fontScale, color[, width[, lineType[, bottomLeftOrigin]]]) Parameter: image : Es ist das Bild, auf das Text gezeichnet werden soll.

text: Textzeichenfolge, die gezeichnet werden soll.

org: Dies sind die Koordinaten der unteren linken Ecke der Textzeichenfolge im Bild. Die Koordinaten werden als Tupel von zwei Werten dargestellt, dh (X-Koordinatenwert, Y-Koordinatenwert).

Schriftart: Gibt die Schriftart an. Einige Schriftarten sind FONT_HERSHEY_SIMPLEX, FONT_HERSHEY_PLAIN, usw.

fontScale: Skalierungsfaktor der Schriftart, der mit der schriftartspezifischen Basisgröße multipliziert wird.

Farbe: Dies ist die Farbe der zu zeichnenden Textzeichenfolge. Für BGR übergeben wir ein Tupel. zB: (255, 0, 0) für blaue Farbe.

Dicke: Es ist die Dicke der Linie in px.

Linientyp: Dies ist ein optionaler Parameter. Er gibt den Typ der zu verwendenden Linie an.

bottomLeftOrigin: Dies ist ein optionaler Parameter. Wenn dies wahr ist, befindet sich der Ursprung der Bilddaten in der unteren linken Ecke. Andernfalls befindet es sich in der oberen linken Ecke.

Rückgabewert: Gibt ein Bild zurück.


Wie schreibe ich Text auf ein Bild in Windows mit Python OpenCV2?

StackOverflow-Frage

Ich möchte Text einfügen ein Bild. Ich schreibe den Code wie folgt:

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

Es gibt einen FEHLER, der besagt, dass das `Modul`-Objekt kein Attribut `CV_FONT_HERSHEY_SIMPLEX` hat

Abfrage kann` t ich die Schriftart wie oben verwende? Ich habe im Internet gesucht, aber nur die Syntax gefunden, die sich auf Opencv C++ für initFont bezieht. Dann dachte ich daran, putText zu verwenden, um die Schriftart als Parameter zu übergeben. Aber es funktioniert bei mir nicht.

Irgendwelche Vorschläge?

Antwort:

Dieser Code verwendet cv2.putText, um Text über ein Bild zu legen. NumPy und OpenCV müssen installiert sein.

import numpy as np import cv2 # Erstellt ein schwarzes Bild  img = np.zeros((512,512,3), np.uint8) # Text schreiben font = cv2.FONT_HERSHEY_SIMPLEX bottomLeftCornerOfText = ( 10,500) fontScale = 1 fontColor = (1). ">255,255,255) lineType = 2 cv2.putText(img,`Hello World!`, bottomLeftCornerOfText, font, fontScale, fontColor, lineType) #Anzeigen das Bild cv2.imshow("img",img) #Bild speichern cv2.imwrite ("out.jpg", img) cv2.waitKey(0) 

Text mit Python cv2.puttext in die Mitte des Bildes schreiben

Wenn Sie die Form (Breite, Höhe) des Textes kennen, den Sie auf das Bild schreiben, können Sie ihn in die Mitte setzen am Bild ausgerichtet.

Die ungefähre Form des Textes im obigen Beispiel ist (268, 36). Möglicherweise müssen Sie die Form eines bestimmten Textes mit Paint oder einer anderen Anwendung finden.

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, in das Text geschrieben wird "Python-Beispiele", #Textposition, #Position, an der geschrieben werden muss cv2.FONT_HERSHEY_SIMPLEX, #Schriftfamilie 1, #Schriftgröße (209, 80, 0, 255), #Schriftfarbe 3) #Schriftstrich cv2.imwrite (`output.png`, Bild) 

Ausgabebild:

cv2 puttext

Python OpenCV puttext




cv2 putte xt Beispiel #

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)) title = "%s:%.2f" % (COCO_CLASSES[int(cls[i])] , conf[i]) cv2.putText(Ursprung, Titel, p3, cv2.FONT_ITALIC, 0.6, (0, 255, 0), 1) cv2.imshow("SSD", Ursprung) k = cv2.waitKey(0) & 0xff #Exit wenn ESC gedrückt if k == 27: return False return True 

cv2.puttext Beispiel #

def drawBoundingBox(self,imgcv,result): für Box im Ergebnis : # print(box) x1,y1,x2,y2 = (box[`topleft`][`x`],box[`topleft`][`y`],box[`bottomright`][`x`] ,box[`bottomright`][`y`]) conf = box[`confidence`] # 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 Beispiel #

def draw_labels(x, y, class_names=None): img = x.numpy() if img. ndim == 2 oder img.shape[2] == 1: img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR) Boxen, Klassen = tf.split(y, (4, 1), Achse=-1) Klassen = class[..., 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.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) sonst: img = cv2.putText(img, str(classes[i]), x1y1, cv2.FONT_HERSHEY_COMPLEX_SMALL, 1, (0, 0, 255), 1) return img 

cv2.puttext Beispiel #

def draw_outputs(img, output, class_names=None): Boxen, Objekthaftigkeit, Klassen = gibt #boxes, Objekthaftigkeit, Klassen aus = Boxen[0], Objekthaftigkeit[0], Klassen[0] wh = np.flip(img.shape[0:2]) if img.ndim == 2 oder 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.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(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 #Beenden wenn ESC gedrückt wird if k == 27: return False return True 

cv2.puttext Beispiel #

def draw_boxes_frame(frame, frame_size, boxes_dicts, class_names, input_size): """Zeichnet erkannte Boxen in einem Videoframe""" 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: für 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]), 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], width=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 Example #

def ProcessFrame(self, frame): # segment arm region segment = self.SegmentArm(frame) # eine Kopie des segmentierten Bildes zum Zeichnen erstellen draw = cv2.cvtColor(segment, cv2.COLOR_GRAY2RGB) # etwas zeichnen Helfer für die richtige Platzierung der 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) # Finde die Hülle des segmentierten Bereichs und finde basierend darauf # c Wölbungsdefekte [Konturen, Defekte] = self.FindHullDefects(segment) # Anzahl der Finger in Abhängigkeit von Konturen und Konvexitätsdefekten erkennen # Defekte zeichnen, die zu Fingern gehören grün, andere rot [nofingers,draw] = self.DetectNumberFingers(contours, Fehler, Draw) # Anzahl der Finger auf Bild drucken cv2.putText(draw, str(nofingers), (30,30), cv2.FONT_HERSHEY_SIMPLEX, 1, (255,255,255)) return draw 

cv2.puttext Beispiel #

def vis_class(img, pos, class_str, bg_color): """Visualisiert die Klasse.""" font_color = cfg.VIS.SHOW_CLASS.COLOR font_scale = cfg.VIS.SHOW_CLASS.FONT_SCALE x0 , y0 = int(pos[0]), int(pos[1]) # Textgröße berechnen. txt = class_str font = cv2.FONT_HERSHEY_SIMPLEX ((txt_w, txt_h), _) = cv2.getTextSize(txt, font, font_scale, 1) # Texthintergrund platzieren. 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) # Text anzeigen. 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 Beispiel #

def plot_one_box(x, img, color=None, label=None, line_thickness=None): # Plottet einen Begrenzungsrahmen auf dem Bild img tl = line_thickness or round(0.002 * (img.shape[0] + img. shape[1]) / 2) + 1 # Linienstärke color = color oder [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, Thickness=tl) if label: tf = max(tl - 1, 1) # Schriftstärke t_size = cv2.getTextSize(label, 0, fontScale=tl / 3, width=tf)[0] c2 = c1[0] + t_size[0], c1[1] - t_size[1] - 3 cv2.rectangle(img, c1, c2, color, -1) # gefüllt cv2.putText(img, label, (c1[0], c1[1] - 2), 0, tl / 3, [225, 255 , 255], Thickness=tf, lineType=cv2.LINE_AA) 

cv2.puttext Example #

def vis_det_and_mask(im, class_name, dets, masks, thresh=0.8): " ""Visuelles Debugging von Erkennungen.""" 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) # Rois nach Koordinaten sortieren, oben zeichnen 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], Thickness=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), Thickness=1) return im