Метод Python OpenCV | cv2.putText()

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

OpenCV Python — это библиотека ссылок Python, предназначенная для решения проблем компьютерного зрения. Метод cv2.putText () используется для рисования текстовой строки на любом изображении.

cv2 puttext

< td class="paramname">lineType = LINE_8,
void cv::putText ( InputOutputArray  img,
const String &  текст,
Точка  org ,
int  fontFace,
double  fontScale,
< /td> Скалярный  цвет,
int  толщина = 1 ,
int 
bool  bottomLeftOrigin = false 
)

Синтаксис: cv2.putText(image, text, org, font, fontScale, color[, толщина[, lineType[, bottomLeftOrigin]]]) Параметры: image : это изображение, на котором должен быть нарисован текст.

текст: текстовая строка, которая должна быть нарисована.

org: это координаты нижнего левого угла текстовой строки на изображении. Координаты представлены в виде кортежей из двух значений, то есть (значение координаты X, значение координаты Y).

шрифт: обозначает тип шрифта. Некоторые из типов шрифтов: FONT_HERSHEY_SIMPLEX, FONT_HERSHEY_PLAIN и т. д.

fontScale: коэффициент масштабирования шрифта, умноженный на базовый размер шрифта.

цвет: это цвет текстовой строки, которую нужно нарисовать. Для BGR мы передаем кортеж. например: (255, 0, 0) для синего цвета.

толщина: толщина линии в пикселях.

lineType: необязательный параметр. Он указывает тип используемой линии.

bottomLeftOrigin: необязательный параметр. Когда это правда, источник данных изображения находится в нижнем левом углу. В противном случае оно находится в верхнем левом углу.

Возвращаемое значение: возвращает изображение.


Как написать текст на изображении в Windows с помощью Python OpenCV2?

Вопрос StackOverflow

Я хочу поместить текст на изображение. Я пишу код как:

cv2.putText(image,"Hello World!!!", (x,y), cv2.CV_FONT_HERSHEY_SIMPLEX, 2, 255) 

Выдает ОШИБКУ, говоря, что объект `module` не имеет атрибута `CV_FONT_HERSHEY_SIMPLEX`

Запрос Can` t Я использую тип шрифта, как указано выше? Я искал в Интернете, но нашел только синтаксис, связанный с Opencv C++ для initFont. Затем я подумал об использовании putText для передачи типа шрифта в качестве параметра. Но у меня это не работает.

Есть предложения?

Ответ:

Этот код использует cv2.putText для наложения текста на изображение. Вам необходимо установить NumPy и OpenCV.

import numpy as np import cv2 # Создать черное изображение  img = np.zeros((512,512,3), np.uint8) # Напишите текст 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) #Показать изображение cv2.imshow("img",img) #Сохранить изображение cv2.imwrite ("out.jpg", img) cv2.waitKey(0) 

Напишите текст в центре изображения, используя Python cv2.puttext

Если вам известна форма (ширина, высота) текста, который вы пишете на изображении, вы можете поместить его в центр выровнено по изображению.

Приблизительная форма текста в приведенном выше примере (268, 36). Возможно, вам потребуется найти форму определенного текста с помощью Paint или другого приложения.

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, на котором записывается текст "Примеры Python", #позиция текста, #позиция, с которой должно начинаться письмо cv2.FONT_HERSHEY_SIMPLEX, #семейство шрифтов 1, #размер шрифта (209, 80, 0, 255), #цвет шрифта 3) #штрих шрифта cv2.imwrite (`output.png`, изображение) 

Выходное изображение:

cv2 puttext

Python OpenCV puttext




cv2 putte xt Пример #

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(origing, 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, title, p3, cv2.FONT_ITALIC, 0.6, (0, 255, 0), 1) cv2.imshow("SSD", origimg) k = cv2.waitKey(0) & 0xff #Выход при нажатии ESC if k == 27: return False return True 

cv2.puttext Пример #

def drawBoundingBox(self,imgcv,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, конф, 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,метка,(x1,y1),cv2.FONT_HERSHEY_COMPLEX,0.5,(0 ,0,0),1) return imgcv 

cv2 puttext Пример #

def draw_labels(x, y, class_names=None): img = x.numpy(), если img. ndim == 2 или img.shape[2] == 1: img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR) коробки, классы = tf.split(y, (4, 1), оси=-1) классы = классы [..., 0] wh = np.flip (img.shape [0: 2]) min_wh = np.amin (wh), если min_wh <= 100: font_size = 0,5 иначе: font_size = 1 для я в диапазоне ( 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) еще: img = cv2.putText(img, str(classes[i]), x1y1, cv2.FONT_HERSHEY_COMPLEX_SMALL, 1, (0, 0, 255), 1) return img 

cv2.puttext Пример #

def draw_outputs(img, outputs, class_names=None): блоки, объектность, классы = выводит #ящики, объектность, классы = ящики[0], объектность[0], классы[0] wh = np.flip(img.shape[0:2]), если img.ndim == 2 или img.shape[ 2] == 1: img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR) min_wh = np.amin(wh), если min_wh <= 100: font_size = 0,5 иначе: font_size = 1 для i в диапазоне (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 Пример #

def detect( imgfile): оригимг = 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(origing, out) for i in range(len(box)): p1 = (box[i][0], box[i][ 1]) p2 = (box[i][2], box[i][3]) cv2.rectangle(origing, 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(origing, title, p3, cv2 .FONT_ITALIC, 0.6, (0, 255, 0), 1) cv2.imshow("SSD", origimg) k = cv2.waitKey(0) & 0xff #Выход при нажатии ESC if k == 27: return False return True 

cv2.puttext Пример #

def draw_boxes_frame(frame, frame_size, box_dicts, class_names, input_size): """Рисует обнаруженные блоки в видеокадре""" box_dict = box_dicts[ 0] resize_factor = (frame_size[0] / input_size[1], frame_size[1] / input_size[0]) для cls в диапазоне (len(class_names)): boxs = box_dict[cls] color = (0, 0, 255 ) если np.size(boxes) != 0: для блока в блоках: xy = box[:4] xy = [int(xy[i] * resize_factor[i% 2]) для i в диапазоне(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 - базовая линия), цвет[::-1], толщина=cv2.FILLED) cv2.putText(frame , class_names[cls], (xy[0], xy[1] - базовый уровень), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 0, 0), 1) 

cv2 puttext Пример #

def ProcessFrame(self, frame): # сегмент области сегмента segment = self.SegmentArm(frame) # сделать копию сегментированного изображения для рисования draw = cv2.cvtColor(segment, cv2.COLOR_GRAY2RGB) # нарисовать немного помощники для правильного размещения руки 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) # находим корпус сегментированной области и на его основе находим # c дефекты onvexity [contours,defects] = self.FindHullDefects(segment) # определяем количество пальцев в зависимости от контуров и дефектов выпуклости # рисуем дефекты, принадлежащие пальцам, зеленым цветом, остальные красным [nofingers,draw] = self.DetectNumberFingers(contours, дефекты, рисование) # вывести количество пальцев на изображении cv2.putText(draw, str(nofingers), (30,30), cv2.FONT_HERSHEY_SIMPLEX, 1, (255,255,255)) return draw 

cv2.puttext Пример #

def vis_class(img, pos, class_str, bg_color): """Визуализирует класс.""" font_color = cfg.VIS.SHOW_CLASS.COLOR font_scale = cfg.VIS.SHOW_CLASS.FONT_SCALE x0 , y0 = int(pos[0]), int(pos[1]) # Вычислить размер текста. txt = class_str font = cv2.FONT_HERSHEY_SIMPLEX ((txt_w, txt_h), _) = cv2.getTextSize(txt, font, font_scale, 1) # Разместить фон текста. 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) # Показать текст. 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 Пример #

def plot_one_box(x, img, color=None, label=None, line_thickness=None): # Наносит одну ограничивающую рамку на изображение img tl = line_thickness or round(0.002 * (img.shape[0] + img. shape[1]) / 2) + 1 # толщина линии color = color или [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, цвет, толщина=tl), если метка: tf = max(tl - 1, 1) # толщина шрифта t_size = cv2.getTextSize(label, 0, fontScale=tl / 3, толщина=tf)[0] c2 = c1[0] + t_size[0], c1[1] - t_size[1] - 3 cv2.rectangle(img, c1, c2, color, -1) # заполненный cv2.putText(img, label, (c1[0], c1[1] - 2), 0, tl / 3, [225, 255 , 255], толщина=tf, lineType=cv2.LINE_AA) 

cv2.puttext Пример #

def vis_det_and_mask(im, class_name, dets, masks, thresh=0.8): " ""Визуальная отладка обнаружений.""" 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) # сортируем прямоугольники по координатам, рисуем сверху bbox first draw_mask = np.zeros(im.shape[:2], dtype=np.uint8) для i в диапазоне (1): bbox = tuple(int(np.round(x)) для x в 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], толщина=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), толщина=1) return im