簡體   English   中英

Opencv-Python,以像素為單位繪制字體大小的文本

[英]Opencv-Python, draw text with fontsize in pixels

在 opencv python 中,我們使用 fontscale 或粗細來顯示字體大小,但是如果我希望我的字體正好是 20px,我該怎么做? 如何更改比例/厚度以計算所需的點大小?

cv2.putText(img_inpainted,boxes['text'][i],(x,y),cv2.FONT_HERSHEY_PLAIN,1,(120,145,152),1,2)

我希望文本的大小正好是 L px。 我怎么能 go 這樣做?

找了好久也沒找到辦法

有一個迂回的方式。 首先,您需要知道給定任意fontScale的文本大小。 然后,假設 Hershey 向量 fonts 線性縮放,您可以將所需的像素高度計算為相應的fontScale

存在 function cv.getTextSize()以獲得某些給定文本的不完全邊界框的大小。 它給出了一個包含上升器但不包括下降器的框......並且基線低於常規字母表中的任何下降器。

這是一個粗略的輪廓,因為我現在不會探討thickness參數的影響,除非假設它是 1。

# calculating a factor here
fontScale = 100
fontFace = cv.FONT_HERSHEY_PLAIN

((fw,fh), baseline) = cv.getTextSize(
    "", fontFace=fontFace, fontScale=fontScale, thickness=1) # empty string is good enough
factor = (fh-1) / fontScale

# that bounding box seems to ignore descenders...

# using the factor now
text = "Hello, World!"
thickness = 1
height_in_pixels = 30
fontScale = (height_in_pixels - thickness) / factor
(w,h) = (500, 100)
canvas = np.zeros((h, w), 'uint8')
# I'm gonna center it
((fw, fh), baseline) = cv.getTextSize(
    text=text, fontFace=fontFace, fontScale=fontScale, thickness=thickness)
org = ((w-fw)//2, (h+fh)//2)
cv.putText(
    img=canvas, text=text, org=org,
    fontFace=fontFace, fontScale=fontScale, color=255, thickness=thickness)

應該是 30 像素

cv.rectangle(canvas, org, (org[0] + fw, org[1] - fh), 128)
cv.line(canvas, (org[0], org[1]+baseline), (org[0] + fw, org[1]+baseline), 128)

與“邊界框”和基線相同

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM