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 

Mamy nadzieję, że ten artykuł pomógł Ci rozwiązać problem. Oprócz Metoda OpenCV w Pythonie | cv2.putTekst() sprawdź inne tematy związane z __del__.

Chcesz się wyróżniać w Pythonie? Zobacz naszą recenzję najlepszych kursów online Pythona 2022. Jeśli interesujesz się Data Science, sprawdź także, jak nauczyć się programowania w R.

Nawiasem mówiąc, ten materiał jest również dostępny w innych językach:



Manuel Porretti

Rome | 2022-11-29

circle to wszystko jest trochę zagmatwane 😭 Metoda OpenCV w Pythonie | cv2.putTekst() to nie jedyny problem jaki napotkałam. Mam tylko nadzieję, że już się nie pojawi

Frank Danburry

Tallinn | 2022-11-29

Prosto i przejrzyście. Dziękuję za podzielenie się. Metoda OpenCV w Pythonie | cv2.putTekst() i inne sprawy z Python functions zawsze były moim słabym punktem 😁.. Po prostu nie jestem pewien, czy to najlepsza metoda

Boris Robinson

Vigrinia | 2022-11-29

Dzięki za wyjaśnienie! Utknąłem z Metoda OpenCV w Pythonie | cv2.putTekst() przez kilka godzin, w końcu się udało 🤗. Mam tylko nadzieję, że już się nie pojawi

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