OpenCV Python, bilgisayarla görme sorunlarını çözmek için tasarlanmış bir Python bağlantı kitaplığıdır. cv2.putText
() yöntemi, herhangi bir görüntü üzerine bir metin dizisi çizmek için kullanılır.
cv2 puttext
void cv::putText | ( | InputOutputArray | img, |
const String & | metin, | ||
Nokta | org , | ||
int | fontFace, | ||
double | fontScale, | ||
< /td> | Skalar | renk, | |
int | kalınlık = 1 , | ||
int | < td class="paramname">lineType =|||
bool | bottomLeftOrigin = false | ||
) |
Sözdizimi: cv2.putText(image, text, org, font, fontScale, color[, Thickness[, lineType[, bottomLeftOrigin]]]) Parametreler: image : Üzerine metnin çizileceği resimdir.
metin: Çizilecek metin dizesi.
org: Görüntüdeki metin dizesinin sol alt köşesinin koordinatlarıdır. Koordinatlar, iki değerin demetleri olarak temsil edilir, yani (X koordinat değeri, Y koordinat değeri).
font: Yazı tipini belirtir. Yazı tiplerinden bazıları FONT_HERSHEY_SIMPLEX, FONT_HERSHEY_PLAIN, vb.`dir.
fontScale: Yazı tipine özgü taban boyutu ile çarpılan yazı tipi ölçek faktörü.
color : Çizilecek metin dizisinin rengidir. BGR için bir Tuple geçiyoruz. örneğin: (255, 0, 0) mavi renk için.
kalınlık: Çizginin piksel cinsinden kalınlığıdır.
lineType: Bu isteğe bağlı bir parametredir. Kullanılacak satırın türünü verir.
bottomLeftOrigin: Bu isteğe bağlı bir parametredir. Doğru olduğunda, görüntü verilerinin kaynağı sol alt köşededir. Aksi takdirde, sol üst köşededir.
Dönüş Değeri: Bir resim döndürür.
Python OpenCV2 kullanarak pencerelerde bir görüntüye nasıl metin yazılır?
StackOverflow sorusu
Bir Resmin üzerine biraz metin koymak istiyorum. Kodu şu şekilde yazıyorum:
cv2.putText(image,"Merhaba Dünya!!!", (x,y), cv2. CV_FONT_HERSHEY_SIMPLEX, 2, 255)
`Module` nesnesinin `CV_FONT_HERSHEY_SIMPLEX` özelliği yok diyerek HATA veriyor
Sorgu Yapılabilir` t Yazı tipini yukarıdaki gibi mi kullanıyorum? İnternette arama yaptım, ancak initFont için yalnızca Opencv C++ ile ilgili sözdizimini buldum. Sonra yazı tipini parametre olarak geçirmek için putText
kullanmayı düşündüm. Ama benim için çalışmıyor.
Herhangi bir öneriniz var mı?
Yanıt:
Bu kod, bir görüntünün üzerine metin yerleştirmek için cv2.putText kullanır. NumPy ve OpenCV`nin kurulu olması gerekir.
içe aktar numpy as np içe aktar cv2 # Siyah bir görüntü oluşturun img = np.zeros((512,512,3), np.uint8) # Biraz Metin Yaz yazı tipi = cv2. FONT_HERSHEY_SIMPLEX bottomLeftCornerOfText = (10,500) fontScale = 1 fontColor = (255,255,255) lineType = 2 cv2.putText(img,`Merhaba Dünya! `, bottomLeftCornerOfText, yazı tipi , fontScale, fontColor, lineType) #Görüntüyü görüntüle cv2.imshow("img",img) #Resmi kaydet cv2.imwrite("out.jpg", img) cv2.waitKey(0)
Python cv2.puttext kullanarak görüntünün ortasına Metin yazın
Şekli (genişlik) biliyorsanız , yükseklik) resmin üzerine yazdığınız metnin ortasını resmin üzerine gelecek şekilde yerleştirebilirsiniz.
Örnekteki metnin yaklaşık şekli a bove (268, 36). Paint veya başka bir uygulamayı kullanarak belirli bir metnin şeklini bulmanız gerekebilir.
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( resim, üzerine metnin yazıldığı #numpy dizi "Python Örnekleri", #metin konumu, yazmanın cv2`yi başlatması gereken #pozisyon.FONT_HERSHEY_SIMPLEX, #font ailesi 1, #font size (209, 80, 0, 255), #font color 3) #font kontur cv2.imwrite (`output.png`, resim)
Çıktı resmi:
Python OpenCV puttext
cv2 koy metin Örnek #
def tespit(imgfile): origimg = cv2.imread(imgfile) img = önişlem(origimg) img = img.astype(np.float32) img = img.transpose((2, 0 , 1)) net.blobs[`data`].data[...] = img out = net.forward() box, conf, cls = i in range(len(box)) için postprocess(origimg, out) : p1 = (kutu[i][0], kutu[i][1]) p2 = (kutu[i][2], kutu[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(origimg, başlık, p3, cv2. FONT_ITALIC, 0.6, (0, 255, 0), 1) cv2.imshow("SSD", origimg) k = cv2.waitKey(0) & 0xff #Exit, eğer k == 27 ise, ESC`ye basılırsa: return False return True
cv2.puttext Örnek #
def drawBoundingBox(self,imgcv,result): sonuç kutusu için: # print(box) x1,y1,x2,y2 = (kutu[` topleft`][`x`],kutu[`topleft`][`y`],kutu[`alt`][`x`],kutu[`alt`][`y`]) conf = kutu[` güven`] # print(conf) label = kutu[`label`] if conf < self.predictThresh: devam # 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 Örnek #
def draw_labels(x, y, class_names=Yok): img = x.numpy() if img.ndim == 2 veya img.shape[2] == 1: img = cv2.cvtColor(img, cv2. COLOR_GRAY2BGR) kutuları, sınıflar = tf.split(y, (4, 1), axis=-1) sınıflar = sınıflar[..., 0] wh = np.flip(img.shape[0:2]) min_wh = np.amin(wh) ise min_wh <= 100: font_size = 0,5 başka: font_size = 1 for i in range(len(boxes)): x1y1 = tuple((np.array(boxes[i][0:2]) * wh).astype(np.int32)) x2y2 = demet((np.array(kutular[i][2:4]) * wh).astype(np.int32)) img = cv2.rectangle(img, x1y1 , x2y2, (255, 0, 0), 1) ise sınıf_adları: img = cv2.putText(img, sınıf_adları[sınıflar[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 Örnek #
def draw_outputs(img, outputs, class_names=None): kutular, nesnelik, sınıflar = çıktılar #kutular, nesnelik, sınıflar = kutular[0], nesnelik[0], sınıflar[0] wh = np .flip(img.shape[0:2]) ise img.ndim == 2 veya img.shape[2] == 1: img = cv2.cvtColor(img, cv2. COLOR_GRAY2BGR) min_wh = np.amin(wh) min_wh <= 100 ise: font_size = 0,5 başka: font_size = 1 i in range(classes.shape[0]): x1y1 = tuple((np.array(boxes[i][0:2]) * wh).astype(np.int32)) x2y2 = demet((np.array(kutular[i][2:4]) * wh).astype(np.int32)) img = cv2.rectangle(img, x1y1, x2y2, (255, 0, 0), 1) img = cv2.putText(img, `{}`.format(int(sınıflar[i])), x1y1, cv2. FONT_HERSHEY_COMPLEX_SMALL, font_size, (0, 0, 255), 1) return img
cv2 puttext Örnek #
def algılama(imgfile): origimg = cv2.imread(imgfile) img = önişlem(origimg) img = img.astype(np.float32) img = img.transpose((2, 0, 1)) net.blobs[`veri`].veri[...] = img çıkışı = net.forward () box, conf, cls = i in range(len(box) için postprocess(origimg, out)): p1 = (kutu[i][0], kutu[i][1]) p2 = (kutu[i ][2], kutu[i][3]) cv2.rectangle(origimg, p1, p2, (0,255,0)) p3 = (max(p1[0], 15), max(p1[1], 15) )) title = "%s:%.2f" % (SINIFLAR[int(cls[i])], conf[i]) cv2.putText(origimg, başlık, p3, cv2. FONT_ITALIC, 0.6, (0, 255 , 0), 1) cv2.imshow("SSD", origimg) k = cv2.waitKey(0) & 0xff #Exit eğer ESC`ye basılırsa k == 27: False return True
cv2. puttext Örnek #
def draw_boxes_frame(frame, frame_size, box_dicts, class_names, input_size): """Bir video karesinde algılanan kutuları çizer""" box_dict = box_dicts[0] resize_factor = (frame_size[0] / input_size[1], frame_size[1] / inp ut_size[0]) cls in range(len(class_names)): kutular = box_dict[cls] color = (0, 0, 255) if np.size(boxes) ! = 0: kutu içindeki kutu için: xy = kutu[: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], kalınlık =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 Örnek #
def ProcessFrame(self, frame): # segment arm bölge segment = self.SegmentArm(frame) # çizimde çizilecek parçalı görüntünün bir kopyasını yapın = cv2.cvtColor (segment, cv2. COLOR_GRAY2RGB) # eli doğru yerleştirmek için bazı yardımcılar çizin 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) # parçalı alanın gövdesini bulun , ve buna dayalı olarak # dışbükeylik kusurlarını bulun [konturlar, kusurlar] = self.FindHullDefects(segment) # konturlara ve dışbükeylik kusurlarına bağlı olarak parmak sayısını tespit edin # parmaklara ait olan kusurları yeşil, diğerleri kırmızı [nofingers,draw] ] = self.DetectNumberFingers(konturlar, kusurlar, çizim) # resimdeki parmak sayısını yazdır cv2.putText(draw, str(nofinger), (30,30), cv2. FONT_HERSHEY_SIMPLEX, 1, (255,255,255)) dönüş çekme
cv2.puttext Örnek #
def vis_class(img, pos, class_str, bg_color): """Sınıfı görselleştirir."" " font_color = cfg.VIS.SHOW_CLASS.COLOR font_scale = cfg.VIS.SHOW_CLASS.FONT_SCALE x0, y0 = int(kon[0]), int(kon[1]) # Metin boyutunu hesaplayın. txt = class_str yazı tipi = cv2. FONT_HERSHEY_SIMPLEX ((txt_w, txt_h), _) = cv2.getTextSize(txt, font, font_scale, 1) # Metin arka planını yerleştir. 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) # Metni göster. 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 Örnek #
def plot_one_box(x, img, color=Yok, label=Yok, line_thickness=Yok): # Görüntü üzerinde bir sınırlayıcı kutu çizer img tl = line_thickness veya round(0.002 * (img.shape[0] + img. şekil[1]) / 2) + 1 # çizgi kalınlığı renk = renk veya [random.randint(0, 255) için _ in range(3)] c1, c2 = (int(x[0]), int(x) [1])), (int(x[2]), int(x[3])) cv2.rectangle(img, c1, c2, color, kalınlık=tl) eğer etiket: tf = max(tl - 1, 1) # yazı tipi kalınlığı t_size = cv2.getTextSize(label, 0, fontScale=tl / 3, kalınlık=tf)[0] c2 = c1[0] + t_size[0], c1[1] - t_size[1] - 3 cv2.rectangle(img, c1, c2, color, -1) # doldurulmuş cv2.putText(img, label, (c1[0], c1[1] - 2), 0, tl / 3, [225, 255 , 255], kalınlık=tf, lineType=cv2. LINE_AA)
cv2.puttext Örnek #
def vis_det_and_mask(im, class_name, dets, masks, thresh=0.8): """Algılamalarda görsel hata ayıklama.""" 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) # rois`i koordinatlara göre sıralayın, önce üstteki kutuyu çizin draw_mask = np.zeros(im.shape[:2], dtype=np.uint8) i in range(1) için: bbox = tuple(int(np.round(x)) için x dets[i,:4] ]) mask = masks[i,:,:] full_mask = unmold_mask(mask, bbox, im.shape) skor = dets[i, -1] ise skor > 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), renkler_bbox[i], kalınlık=cv2. FILLED) application_mask(im, full_mask, draw_mask, colors_mask[i], 0.5) draw_mask += full_mask cv2.putText(im, `%s` % (sınıf_adı), ( bbox[0]+5, bbox[1] + 12), cv2.FONT_HERSHEY_PLAIN, 1.0, (255,255,255), kalınlık=1) dönüş im