파이썬 OpenCV 방법 | cv2.putText()

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

OpenCV Python은 컴퓨터 비전 문제를 해결하도록 설계된 Python 링크 라이브러리입니다. cv2.putText () 메소드는 모든 이미지에 텍스트 문자열을 그리는 데 사용됩니다.

cv2 puttext

< td class="paramname">lineType = LINE_8,
무효 cv::putText ( InputOutputArray  img,
const 문자열 &  텍스트,
포인트  조직 ,
int  fontFace,
이중  fontScale,
< /td> 스칼라  색상,
int  두께 = 1 ,
int 
bool  bottomLeftOrigin = 거짓 
)

구문: cv2.putText(image, text, org, font, fontScale, color[, thickness[, lineType[, bottomLeftOrigin]]]) 매개변수: image : 텍스트가 그려질 이미지입니다.

text: 그릴 텍스트 문자열입니다.

org: 이미지에서 문자열의 왼쪽 하단 모서리의 좌표입니다. 좌표는 (X 좌표 값, Y 좌표 값) 두 값의 튜플로 표시됩니다.

글꼴: 글꼴 유형을 나타냅니다. 일부 글꼴 유형은 FONT_HERSHEY_SIMPLEX, FONT_HERSHEY_PLAIN 등입니다.

fontScale: 글꼴별 기본 크기를 곱한 글꼴 배율입니다.

color: 그릴 문자열의 색상입니다. BGR의 경우 튜플을 전달합니다. 예: 파란색의 경우 (255, 0, 0).

thickness: 선의 두께(px)입니다.

lineType: 선택적 매개변수입니다. 사용할 라인의 유형을 제공합니다.

bottomLeftOrigin: 선택적 매개변수입니다. true인 경우 이미지 데이터 원점은 왼쪽 하단 모서리에 있습니다. 그렇지 않으면 왼쪽 상단 모서리에 있습니다.

반환 값: 이미지를 반환합니다.


Python OpenCV2를 사용하여 Windows에서 이미지에 텍스트를 쓰는 방법은 무엇입니까?

StackOverflow 질문

텍스트를 입력하고 싶습니다. 이미지. 다음과 같이 코드를 작성하고 있습니다.

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

`module` 개체에 `CV_FONT_HERSHEY_SIMPLEX` 속성이 없다는 오류가 발생합니다.

Query Can`䭓 위와 같은 폰트를 사용하고 있습니까? 인터넷 검색을 해보니 initFont용 Opencv C++ 관련 문법만 찾았습니다. 그런 다음 putText를 사용하여 글꼴 유형을 매개변수로 전달하는 방법을 생각했습니다. 하지만 작동하지 않습니다.

제안 사항이 있습니까?

답변:

이 코드는 cv2.putText를 사용하여 이미지에 텍스트를 오버레이합니다. NumPy 및 OpenCV가 설치되어 있어야 합니다.

가져오기 numpy as np 가져오기 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)입니다. 그림판이나 다른 응용 프로그램을 사용하여 특정 텍스트의 모양을 찾아야 할 수도 있습니다.

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 텍스트가 쓰여지는 배열 "파이썬 예제", #텍스트 위치, #쓰기를 시작해야 하는 위치 cv2.FONT_HERSHEY_SIMPLEX, #글꼴 패밀리 1, #글꼴 크기(209, 80, 0, 255), #글꼴 색상 3) #글꼴 스트로크 cv2.imwrite (`output.png`, 이미지) 

출력 이미지:

cv2 puttext

Python OpenCV puttext




cv2 퍼테 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(origimg, p1, p2, ( 0,255,0)) p3 = (최대(p1[0], 15), 최대(p1[1], 15)) 제목 = "%s:%.2f" % (COCO_CLASSES[int(cls[i])] , conf[i]) cv2.putText(origimg, 제목, p3, cv2.FONT_ITALIC, 0.6, (0, 255, 0), 1) cv2.imshow("SSD", origimg) k = cv2.waitKey(0) & 0xff #Exit 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,conf, 레이블) 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) imgcv 반환 

cv2 puttext 예제 #

def draw_labels(x, y, class_names=None): img = x.numpy() if img. ndim == 2 또는 img.shape[2] == 1: img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR) 상자, 클래스 = tf.split(y, (4, 1), axis=-1) 클래스 = classes[..., 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(박스)): x1y1 = 튜플((np.array(boxes[i][0:2]) * wh).astype(np.int32)) x2y2 = 튜플((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 1, (0, 0, 255), 1) return img 

cv2.puttext 예제 #

def draw_outputs(img, output, class_names=None): boxs, objectness, classes = 출력 #boxes, objectness, classes = boxs[0], objectness[0], classes[0] wh = np.flip(img.shape[0:2]) if img.ndim == 2 or 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 for i in range(classes.shape[0 ]): x1y1 = 튜플((np.array(boxes[i][0:2]) * wh).astype(np.int32)) x2y2 = 튜플((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 = 전처리(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) 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 = (최대(p1[0], 15) , 최대(p1[1], 15)) 제목 = "%s:%.2f" % (CLASSES[int(cls[i])], conf[i]) cv2.putText(origimg, 제목, p3, cv2 .FONT_ITALIC, 0.6, (0, 255, 0), 1) cv2.imshow("SSD", origimg) k = cv2.waitKey(0) & 0xff #k == 27인 경우 ESC를 누르면 종료: False 반환 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]) for cls in range(len(class_names)): boxs = boxs_dict[cls] color = (0, 0, 255 ) if np.size(boxes) != 0: 상자 안의 경우: 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]), 색상[::-1], 2) (test_width, text_height), 기준선 = cv2.getTextSize(class_names[cls], cv2.FONT_HERSHEY_SIMPLEX, 0.75, 1) cv2.rectangle(프레임 , (xy[0], xy[1]), (xy[0] + test_width, xy[1] - text_height - 기준선), color[::-1], 두께=cv2.FILLED) cv2.putText(프레임 , class_names[cls], (xy[0], xy[1] - 기준선), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 0, 0), 1) 

cv2 puttext 예제 #

def ProcessFrame(self, frame): # segment arm region segment = self.SegmentArm(frame) # 그릴 때 그릴 분할된 이미지의 복사본 만들기 = 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, color, thickness=tl) if label: tf = max(tl - 1, 1) # 글꼴 두께 t_size = cv2.getTextSize(label, 0, fontScale=tl / 3, thickness=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, mask, 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) # 좌표에 따라 rois를 정렬하고 위쪽을 그립니다. 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 = 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], 두께=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) im 
반환

이 문서가 문제를 해결하는 데 도움이 되었기를 바랍니다. 파이썬 OpenCV 방법 | cv2.putText() 외에 다른 __del__ 관련 주제를 확인하세요.

파이썬에서 뛰어나고 싶으십니까? 2022최고의 Python 온라인 과정에 대한 검토를 참조하세요. 데이터 과학에 관심이 있다면 R로 프로그래밍을 배우는 방법도 확인하세요.

그런데 이 자료는 다른 언어로도 제공됩니다.



Olivia Emmerson

London | 2022-11-29

코딩 인터뷰를 준비하고 있었습니다. 명확히 해 주셔서 감사합니다. Python의 파이썬 OpenCV 방법 | cv2.putText()은 가장 간단한 것이 아닙니다.. 피드백과 함께 내일 돌아올 것입니다

Schneider Sikorski

London | 2022-11-29

__del__은(는) 모든 것이 약간 혼란스럽습니다 😭 파이썬 OpenCV 방법 | cv2.putText()이(가) 만난 유일한 문제는 아닙니다.. 더 이상 나타나지 않기를 바랄뿐입니다

Anna Zelotti

Massachussetts | 2022-11-29

간단하고 명확하게. 공유해 주셔서 감사합니다. 파이썬 OpenCV 방법 | cv2.putText() 및 __del__의 기타 문제는 항상 저의 약점이었습니다 😁. 내 학사 논문에 사용할 것입니다

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