Metoda OpenCV w Pythonie | cv2.putTekst()

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

OpenCV Python to biblioteka linków Pythona zaprojektowana do rozwiązywania problemów z widzeniem komputerowym. Metoda cv2.putText () służy do rysowania ciągu tekstowego na dowolnym obrazie.

cv2 puttext

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

Składnia: cv2.putText(obraz, tekst, org, czcionka, fontScale, kolor[, grubość[, lineType[, bottomLeftOrigin]]]) Parametry: obraz : jest to obraz, na którym ma być narysowany tekst.

tekst: ciąg tekstowy do narysowania.

org: są to współrzędne lewego dolnego rogu ciągu tekstowego na obrazie. Współrzędne są reprezentowane jako krotki o dwóch wartościach, tj. (wartość współrzędnej X, wartość współrzędnej Y).

font: oznacza rodzaj czcionki. Niektóre typy czcionek to FONT_HERSHEY_SIMPLEX, FONT_HERSHEY_PLAIN itp.

fontScale: współczynnik skali czcionki pomnożony przez rozmiar podstawowy danej czcionki.

color: kolor ciągu tekstowego do narysowania. W przypadku BGR przekazujemy krotkę. np.: (255, 0, 0) dla koloru niebieskiego.

Grubość: Jest to grubość linii w pikselach.

LineType strong>: To jest parametr opcjonalny. Podaje typ używanej linii.

bottomLeftOrigin: To jest parametr opcjonalny. Jeśli to prawda, źródło danych obrazu znajduje się w lewym dolnym rogu. W przeciwnym razie znajduje się w lewym górnym rogu.

Wartość zwrotu: zwraca obraz.


Jak napisać tekst na obrazie w systemie Windows za pomocą Pythona OpenCV2?

Pytanie StackOverflow

Chcę umieścić tekst na obrazie. Piszę kod jako:

cv2.putText(image,"Witaj świecie!", (x,y), cv2. CV_FONT_HERSHEY_SIMPLEX, 2, 255) 

Daje BŁĄD, mówiąc, że obiekt „moduł” nie ma atrybutu „CV_FONT_HERSHEY_SIMPLEX”

Zapytanie Może” t używam czcionki jak powyżej? Szukałem w Internecie, ale znalazłem tylko składnię związaną z Opencv C++ dla initFont. Potem pomyślałem o użyciu putText do przekazania typu czcionki jako parametru. Ale to nie działa dla mnie.

Jakieś sugestie?

Odpowiedź:

Ten kod używa cv2.putText do nakładania tekstu na obraz. Musisz zainstalować NumPy i OpenCV.

import numpy jako np import cv2 # Utwórz czarny obraz  img = np. zera ((512,512,3), np.uint8) # Napisz jakiś tekst font = cv2. FONT_HERSHEY_SIMPLEX bottomLeftCornerOfText = (10,500) fontScale = 1 fontColor = (255,255,255) lineType = 2 cv2.putText(img,`Witaj świecie!`, bottomLeftCornerOfText, czcionka , fontScale, fontColor, lineType) #Wyświetl obraz cv2.imshow("img",img) #Zapisz obraz cv2.imwrite("out.jpg", img) cv2.waitKey(0) 

Napisz tekst na środku obrazu za pomocą Pythona cv2.puttext

Jeśli znasz kształt (szerokość , wysokość) tekstu, który piszesz na obrazku, możesz umieścić go na środku wyrównanym do obrazka.

Przybliżony kształt tekstu w przykładzie a powyżej jest (268, 36). Może być konieczne znalezienie kształtu określonego tekstu za pomocą programu Paint lub innej aplikacji.

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( obraz, tablica #numpy, na której jest zapisywany tekst "Przykłady Pythona", #pozycja tekstu, #pozycja, od której należy rozpocząć pisanie cv2. FONT_HERSHEY_SIMPLEX, #rodzina czcionek 1, #rozmiar czcionki (209, 80, 0, 255), #kolor czcionki 3) #obrys czcionki cv2.imwrite (`output.png`, obraz) 

Obraz wyjściowy:

cv2 puttext

Python OpenCV puttext




cv2 put tekst Przykład #

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 = (pudełko[i][0], pudełko[i][1]) p2 = (pudełko[i][2], pudełko[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(oryginał, tytuł, p3, cv2. FONT_ITALIC, 0.6, (0, 255, 0), 1) cv2.imshow("SSD", origimg) k = cv2.waitKey(0) & 0xff #Wyjdź po naciśnięciu klawisza ESC, jeśli k == 27: return False return True 

cv2.puttext Przykład #

def drawBoundingBox(self,imgcv,result): dla pola w wyniku: # print(box) x1,y1,x2,y2 = (box[` topleft`][`x`],box[`toleft`][`y`],box[`bottomright`][`x`],box[`bottomright`][`y`]) conf = box[` zaufanie`] # 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(etykieta,cv2. FONT_HERSHEY_COMPLEX,0.5,2) # print(`labelSize>>`,labelSize) _x1 = x1 _y1 = y1#+ int(Rozmiaretykiety[0][1]/2) _x2 = _x1+Rozmiaretykiety[0][0] _y2 = y1-int(Rozmiaretykiety[0][1]) cv2.rectangle(imgcv,(_x1,_y1),( _x2,_y2),(0,255,0),cv2. WYPEŁNIONE) cv2.putText(imgcv,label,(x1,y1),cv2. FONT_HERSHEY_COMPLEX,0.5,(0,0,0),1) return imgcv 

cv2 puttext Przykład #

def draw_labels(x, y, class_names=Brak): img = x.numpy() if img.ndim == 2 lub img.shape[2] == 1: img = cv2.cvtColor(img, cv2. COLOR_GRAY2BGR) pudełka, klasy = tf.split(y, (4, 1), oś=-1) klasy = klasy[..., 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 = krotka((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 Przykład #

def draw_outputs(img, outputs, class_names=Brak): pudełka, obiektowość, klasy = wyjścia #pola, obiektowość, klasy = pola[0], obiektowość[0], klasy[0] wh = np .flip(img.shape[0:2]) if img.ndim == 2 lub img.shape[2] == 1: img = cv2.cvtColor(img, cv2. COLOR_GRAY2BGR) min_wh = np.amin(wh) jeśli 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 = krotka((np.array(pola[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 Przykład #

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 #Wyjdź po naciśnięciu ESC, jeśli k == 27: return False return True 

cv2. puttext Przykład #

def draw_boxes_frame(frame, frame_size, boxes_dicts, class_names, input_size): """Rysuje wykryte pola w ramce wideo""" boxes_dict = boxes_dicts[0] resize_factor = (frame_size[0] / input_size[1], frame_size[1] / inp ut_size[0]) dla cls w range(len(class_names)): box = boxes_dict[cls] color = (0, 0, 255) if np.size(boxes) ! = 0: dla pola w polach: 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]), kolor[::-1], 2) (szerokość_testu, wysokość_tekstu), baseline = cv2.getTextSize(nazwy_klas[cls], cv2. FONT_HERSHEY_SIMPLEX , 0.75, 1) cv2.rectangle(ramka, (xy[0], xy[1]), (xy[0] + szerokość_testu, xy[1] - wysokość_tekstu - linia bazowa), kolor[::-1], grubość =cv2. FILLED) cv2.putText(ramka, nazwy klas[cls], (xy[0], xy[1] - linia bazowa), cv2. FONT_HERSHEY_SIMPLEX, 0,75, (0, 0, 0), 1) 

cv2 puttext Przykład #

def ProcessFrame(self, frame): # segment obszaru ramienia segment = self.SegmentArm(frame) # wykonaj kopię posegmentowanego obrazu do rysowania podczas rysowania = cv2.cvtColor (segment, cv2. COLOR_GRAY2RGB) # narysuj pomocników do prawidłowego ułożenia ręki 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) # znajdź kadłub segmentowanego obszaru , i na tej podstawie znajdź # defekty wypukłości [contours,defects] = self.FindHullDefects(segment) # wykryj liczbę palców w zależności od konturów i defektów wypukłości # narysuj defekty należące do palców zielone, inne czerwone [nofingers,draw ] = self.DetectNumberFingers(kontury, defekty, rysuj) # wypisz liczbę palców na obrazku cv2.putText(draw, str(nofingers), (30,30), cv2. FONT_HERSHEY_SIMPLEX, 1, (255,255,255)) return draw 

cv2.puttext Przykład #

def vis_class(img, pos, class_str, bg_color): """Wizualizuje klasę."" font_color = cfg.VIS.SHOW_CLASS.COLOR font_scale = cfg.VIS.SHOW_CLASS.FONT_SCALE x0, y0 = int(pos[0]), int(pos[1]) # Oblicz rozmiar tekstu. txt = class_str czcionka = cv2. FONT_HERSHEY_SIMPLEX ((txt_w, txt_h), _) = cv2.getTextSize(txt, czcionka, font_scale, 1) # Umieść tło tekstu. 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) # Pokaż 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 Przykład #

def plot_one_box(x, img, color=None, label=None, line_thickness=None): # Drukuje jedno pole ograniczające na obrazie img tl = line_thickness or round (0,002 * (img.shape[0] + img. shape[1]) / 2) + 1 # grubość linii color = color lub [losowy.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, kolor, grubość=tl) jeśli etykieta: tf = max(tl - 1, 1) # grubość czcionki t_size = cv2.getTextSize(etykieta, 0, fontScale=tl / 3, grubość=tf)[0] c2 = c1[0] + t_size[0], c1[1] - t_size[1] - 3 cv2.rectangle(img, c1, c2, kolor, -1) # wypełnione cv2.putText(img, label, (c1[0], c1[1] - 2), 0, tl / 3, [225, 255 , 255], grubość=tf, lineType=cv2. LINE_AA) 

cv2.puttext Przykład #

def vis_det_and_mask(im, class_name, dets, masks, thresh=0.8): """Wizualne debugowanie wykryć.""" 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) # sortuj rois według współrzędnych, najpierw narysuj górne bbox 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 = maski[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 + szerokość_słowa*8, bbox[1] +15), kolory_bbox[i], grubość=cv2. FILLED) apply_mask(im, full_mask, draw_mask, colors_mask[i], 0.5) draw_mask += full_mask cv2.putText(im, `%s` % (nazwa_klasy), ( bbox[0]+5, bbox[1] + 12), cv2.FONT_HERSHEY_PLAIN, 1.0, (255,255,255), grubość=1) powrót im