[英]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)
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.