如何根据 OpenCV、Python 中的图像大小调整 cv2.putText 的文本大小?

新手上路,请多包涵
fontScale = 1
fontThickness = 1

# make sure font thickness is an integer, if not, the OpenCV functions that use this may crash
fontThickness = int(fontThickness)

upperLeftTextOriginX = int(imageWidth * 0.05)
upperLeftTextOriginY = int(imageHeight * 0.05)

textSize, baseline = cv2.getTextSize(resultText, fontFace, fontScale, fontThickness)
textSizeWidth, textSizeHeight = textSize

# calculate the lower left origin of the text area based on the text area center, width, and height
lowerLeftTextOriginX = upperLeftTextOriginX
lowerLeftTextOriginY = upperLeftTextOriginY + textSizeHeight

# write the text on the image
cv2.putText(openCVImage, resultText, (lowerLeftTextOriginX, lowerLeftTextOriginY), fontFace, fontScale, Color,
            fontThickness)

似乎 fontScale 没有根据图像的宽度和高度缩放文本,因为对于不同大小的图像,文本的大小几乎相同。那么如何根据图像大小调整文本大小,使所有文本都能适应图像呢?

原文由 XINDI LI 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
1 个回答

这是适合矩形内文本的解决方案。如果您的矩形宽度可变,那么您可以通过遍历潜在比例并测量文本占用的宽度(以像素为单位)来获得字体比例。一旦低于矩形宽度,您就可以检索比例并将其实际用于 putText

 def get_optimal_font_scale(text, width):
    for scale in reversed(range(0, 60, 1)):
        textSize = cv.getTextSize(text, fontFace=cv.FONT_HERSHEY_DUPLEX, fontScale=scale/10, thickness=1)
        new_width = textSize[0][0]
        if (new_width <= width):
            print(new_width)
            return scale/10
    return 1

原文由 shabany 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏