如何使用 Python OpenCV 在 cv2.putText 中制作黑色背景

新手上路,请多包涵

我有一个项目 opencv 在框架上我使用 cv2.putText() 显示一些文本。目前它看起来像下面这样:

在此处输入图像描述

正如您在左上角看到的,文本存在但不清晰可见。是否可以将背景设为黑色,以便文本看起来不错。像下图这样的东西:

在此处输入图像描述

即使黑色背景覆盖到框架的右侧,也可以。下面是我用来在框架上放置文本的代码:

 cv2.putText(frame, "Data: N/A", (5, 30), cv2.FONT_HERSHEY_COMPLEX_SMALL, 1, (0, 0, 255), 1)
cv2.putText(frame, "Room: C1", (5, 60), cv2.FONT_HERSHEY_COMPLEX_SMALL, 1, (0, 0, 255), 1)

opencv 中是否有任何预建方法/库可以执行此操作。任何人都可以建议一个好方法吗?

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

阅读 2.3k
2 个回答

没有预建方法,但一个简单的方法是使用 cv2.rectangle + cv2.putText 。您需要做的就是在图像上绘制黑色矩形,然后放置文本。您可以根据您想要矩形的大小调整 x,y,w,h 参数。这是一个例子:

输入图像:

在此处输入图像描述

结果:

在此处输入图像描述

 import cv2
import numpy as np

# Load image, define rectangle bounds
image = cv2.imread('1.jpg')
x,y,w,h = 0,0,175,75

# Draw black background rectangle
cv2.rectangle(image, (x, x), (x + w, y + h), (0,0,0), -1)

# Add text
cv2.putText(image, "THICC flower", (x + int(w/10),y + int(h/2)), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255,255,255), 2)

# Display
cv2.imshow('image', image)
cv2.waitKey()

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

使用此功能:

 import cv2

def draw_text(img, text,
          font=cv2.FONT_HERSHEY_PLAIN,
          pos=(0, 0),
          font_scale=3,
          font_thickness=2,
          text_color=(0, 255, 0),
          text_color_bg=(0, 0, 0)
          ):

    x, y = pos
    text_size, _ = cv2.getTextSize(text, font, font_scale, font_thickness)
    text_w, text_h = text_size
    cv2.rectangle(img, pos, (x + text_w, y + text_h), text_color_bg, -1)
    cv2.putText(img, text, (x, y + text_h + font_scale - 1), font, font_scale, text_color, font_thickness)

    return text_size

然后你可以像这样调用函数:

 image = 127 * np.ones((100, 200, 3), dtype="uint8")
pos = (10, 10)
w, h = draw_text(image, "hello", pos=(10, 10))
draw_text(image, "world", font_scale=4, pos=(10, 20 + h), text_color_bg=(255, 0, 0))
cv2.imshow("image", image)
cv2.waitKey()

在 OpenCV 中绘制带背景的文本

请注意,默认情况下它会绘制黑色背景,但您可以根据需要使用不同的颜色。

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

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