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
没有根据图像的宽度和高度来缩放文本,因为不同大小的图像中的文本几乎是相同的大小。那么我如何根据图像大小来调整文本的大小,以便所有的文本都能适合图像呢?
8条答案
按热度按时间axr492tv1#
下面是一个将文本放入矩形的解决方案。如果矩形的宽度是可变的,那么你可以通过循环使用可能的缩放比例并测量文本的宽度(以像素为单位)来获得字体缩放比例。一旦你低于矩形宽度,你就可以检索缩放比例并使用它来实际
putText
:6jjcrrmo2#
因为这起作用了!
请记住字体类型会影响常量25
qlckcl4x3#
方法
一种方法是将字体大小按比例缩放到图像大小。根据我的经验,不仅对
fontScale
应用此方法,而且对thickness
应用此方法时,会获得更自然的结果。例如:示例
让我们以this free-to-use stock photo为例,我们通过将宽度重新调整为2000px和600px(保持纵横比不变)来创建两个版本的基础图像,使用上述方法,文本在两种情况下看起来都与图像大小相符(这里显示了一个示例性用例,我们在其中标注了边界框):
x8diyxa74#
如果您对大小大约为1000 x 1000的图像使用
fontScale = 1
,那么这段代码应该可以正确地缩放字体。如果你仍然有任何问题,请发表评论。
wrrgggsh5#
我实现了一个函数来查找文本的最佳居中位置。
看看这些代码是否对您有所帮助。
注意,该函数接受四个参数:
s_txt
(要渲染的字符串)、font_face
、font_thick
和cv_bgd
(ndarray格式的背景图像)putText()
时,编写如下代码:tv6aics16#
您可以使用
get_optimal_font_scale
函数,如下所示,根据图像大小调整字体大小:您可以更改映像的
fontScale
。n9vozmp47#
这是我的工作。
......
2o7dmzc58#
一个简单的效用函数:
用法: