OpenCV Python è una libreria di collegamenti Python progettata per risolvere problemi di visione artificiale. Il metodo cv2.putText
() viene utilizzato per disegnare una stringa di testo su qualsiasi immagine.
cv2 puttext
void cv::putText | ( | InputOutputArray | img, |
const String & | testo, | ||
Punto | org , | ||
int | fontFace, | ||
double | fontScale, | ||
< /td> | Scalare | colore, | |
int | spessore = 1 , | ||
int | < td class="paramname">lineType =|||
bool | bottomLeftOrigin = false | ||
) |
Sintassi: cv2.putText(image, text, org, font, fontScale, color[, thick[, lineType[, bottomLeftOrigin]]]) Parametri: image : è l`immagine su cui deve essere disegnato il testo.
testo: stringa di testo da disegnare.
org strong>: sono le coordinate dell`angolo inferiore sinistro della stringa di testo nell`immagine. Le coordinate sono rappresentate come tuple di due valori, cioè (valore della coordinata X, valore della coordinata Y).
font: Indica il tipo di carattere. Alcuni tipi di carattere sono FONT_HERSHEY_SIMPLEX, FONT_HERSHEY_PLAIN, , ecc.
fontScale: fattore di scala del carattere che viene moltiplicato per la dimensione di base specifica del carattere.
color: è il colore della stringa di testo da disegnare. Per BGR, passiamo una tupla. es: (255, 0, 0) per il colore blu.
spessore: è lo spessore della linea in px.
lineType: questo è un parametro facoltativo. Fornisce il tipo di riga da utilizzare.
bottomLeftOrigin: questo è un parametro facoltativo. Quando è vero, l`origine dei dati dell`immagine è nell`angolo in basso a sinistra. Altrimenti, si trova nell`angolo in alto a sinistra.
Valore di ritorno: restituisce un`immagine.
Come scrivere testo su un`immagine in Windows usando Python OpenCV2?
Domanda StackOverflow
Voglio inserire del testo un`immagine. Sto scrivendo il codice come:
cv2.putText(image,"Hello World!!!", (x,y), cv2.CV_FONT_HERSHEY_SIMPLEX, 2, 255)
Dà ERROR, dicendo che l`oggetto `module` non ha attributo `CV_FONT_HERSHEY_SIMPLEX`
Query Can` t Uso il tipo di carattere come sopra? Ho cercato in Internet, ma ho trovato solo la sintassi relativa a Opencv C++ per initFont. Poi ho pensato di usare putText
per passare il tipo di carattere come parametro. Ma non funziona per me.
Qualche suggerimento?
Risposta:
Questo codice usa cv2.putText per sovrapporre il testo a un`immagine. Devi installare NumPy e OpenCV.
import numpy as np import cv2 # Crea un`immagine nera img = np.zeros((512,512,3), np.uint8) # Scrivi del testo 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) #Visualizza l`immagine cv2.imshow("img",img) #Salva immagine cv2.imwrite ("out.jpg", img) cv2.waitKey(0)
Scrivi il testo al centro dell`immagine usando Python cv2.puttext
Se conosci la forma (larghezza, altezza) del testo che scrivi sull`immagine, puoi metterlo al centro allineato sull`immagine.
La forma approssimativa del testo nell`esempio sopra è (268, 36). Potrebbe essere necessario trovare la forma di un testo specifico utilizzando Paint o qualche altra applicazione.
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 su cui è scritto il testo "Esempi Python", #posizione del testo, #posizione in cui deve iniziare la scrittura cv2.FONT_HERSHEY_SIMPLEX, #famiglia di caratteri 1, #dimensione del carattere (209, 80, 0, 255), #colore del carattere 3) #tratto del carattere cv2.imwrite (`output.png`, immagine)
Immagine di output:
Python OpenCV puttext
cv2 putte xt Esempio #
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 = (casella[i][0], casella[i][1]) p2 = (casella[i][2], casella[i][3]) cv2.rectangle(origimg, p1, p2, ( 0,255,0)) p3 = (max(p1[0], 15), max(p1[1], 15)) titolo = "%s:%.2f" % (COCO_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 #Esci se ESC premuto se k == 27: return False return True
cv2.puttext Esempio #
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[`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 Esempio #
def draw_labels(x, y, class_names=None): img = x.numpy() if img. ndim == 2 o img.shape[2] == 1: img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR) box, classi = tf.split(y, (4, 1), axis=-1) classi = classi[..., 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, nomi_classi[classi[i]], x1y1, cv2.FONT_HERSHEY_COMPLEX_SMALL, font_size, (0, 0, 255), 1) else: img = cv2.putText(img, str(classi[i]), x1y1, cv2.FONT_HERSHEY_COMPLEX_SMALL, 1, (0, 0, 255), 1) return img
cv2.puttext Esempio #
def draw_outputs(img, outputs, class_names=None): scatole, oggettività, classi = restituisce #boxes, oggettività, classi = scatole[0], oggettività[0], classi[0] wh = np.flip(img.shape[0:2]) if img.ndim == 2 o 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 per 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 Esempio #
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 = (casella[i][2], casella[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 #Esci se ESC premuto se k == 27: return False return True
cv2.puttext Esempio #
def draw_boxes_frame(frame, frame_size, box_dicts, class_names, input_size): """Disegna i riquadri rilevati in un fotogramma 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: per box in box: 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 - linea di base), color[::-1], thick=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 Esempio #
def ProcessFrame(self, frame): # segment arm region segment = self.SegmentArm(frame) # crea una copia dell`immagine segmentata su cui disegnare draw = cv2.cvtColor(segment, cv2.COLOR_GRAY2RGB) # draw some aiutanti per posizionare correttamente 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) # trova lo scafo dell`area segmentata e in base a quello trova il # c onvessity difetti [contours,defects] = self.FindHullDefects(segment) # rileva il numero di dita in base ai contorni e ai difetti di convessità # traccia i difetti che appartengono alle dita verdi, altri rossi [nofingers,draw] = self.DetectNumberFingers(contours, difetti, disegno) # stampa numero di dita sull`immagine cv2.putText(draw, str(nofingers), (30,30), cv2.FONT_HERSHEY_SIMPLEX, 1, (255,255,255)) return draw
cv2.puttext Esempio #
def vis_class(img, pos, class_str, bg_color): """Visualizza 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]) # Calcola la dimensione del testo. txt = class_str font = cv2.FONT_HERSHEY_SIMPLEX ((txt_w, txt_h), _) = cv2.getTextSize(txt, font, font_scale, 1) # Posiziona lo sfondo del testo. 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 il testo. 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 Esempio #
def plot_one_box(x, img, color=None, label=None, line_thickness=None): # Traccia un riquadro di delimitazione sull`immagine img tl = line_thickness o round(0.002 * (img.shape[0] + img. shape[1]) / 2) + 1 # spessore della linea 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, thick=tl) if label: tf = max(tl - 1, 1) # spessore del carattere 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) # riempito cv2.putText(img, label, (c1[0], c1[1] - 2), 0, tl / 3, [225, 255 , 255], thick=tf, lineType=cv2.LINE_AA)
cv2.puttext Esempio #
def vis_det_and_mask(im, class_name, dets, masks, thresh=0.8): " ""Debug visivo dei rilevamenti.""" 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) # ordina il rois in base alle coordinate, disegna in alto 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 = 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], 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), spessore=1) return im