【问题标题】:Python OpenCV cv2 drawing rectangle with textPython OpenCV cv2 用文本绘制矩形
【发布时间】:2019-09-30 04:02:21
【问题描述】:

我在我的图像上画了一个矩形

cv2.rectangle(frame,(x,y),(x1,y1),(0,255,0),2)

我想绘制带有文本信息的矩形。我该怎么做?是否有任何现成可用的实现?或者我应该匹配矩形的左上角坐标并尝试使用 cv2 rect 元素显示不同的 cv2 文本元素?

您能指导我了解任何代码实现/解决方法吗?

P.S:我不想使用 object_detection。 tf 提供的可视化工具。

【问题讨论】:

  • 您应该匹配矩形的左上角坐标,并尝试使用 cv2 rect 元素显示不同的 cv2 文本元素
  • 你的意思是说OpenCV中没有现成的实现?你能告诉我任何解决方法吗?
  • 据我所知没有。不过,仅获取左上边缘坐标非常简单,您应该可以做到。

标签: python image opencv image-processing computer-vision


【解决方案1】:

对您来说可能为时已晚,但我们可以这样做:

x1, y1 是左上角
x2, y2 是右下角

# For bounding box
img = cv2.rectangle(img, (x1, y1), (x2, y2), color, 2)
 
# For the text background
# Finds space required by the text so that we can put a background with that amount of width.
(w, h), _ = cv2.getTextSize(
        label, cv2.FONT_HERSHEY_SIMPLEX, 0.6, 1)

# Prints the text.    
img = cv2.rectangle(img, (x1, y1 - 20), (x1 + w, y1), color, -1)
img = cv2.putText(img, label, (x1, y1 - 5),
                    cv2.FONT_HERSHEY_SIMPLEX, 0.6, text_color, 1)

# For printing text
img = cv2.putText(img, 'test', (x1, y1),
                    cv2.FONT_HERSHEY_SIMPLEX, 0.6, (255,255,255), 1)

【讨论】:

    【解决方案2】:

    您可以使用cv2.putText() 在矩形顶部覆盖文本信息。例如,您可以抓取轮廓坐标,绘制一个矩形,然后通过向上移动将文本放在上面。

    x,y,w,h = cv2.boundingRect(contour)
    image = cv2.rectangle(image, (x, y), (x + w, y + h), (36,255,12), 1)
    cv2.putText(image, 'Fedex', (x, y-10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (36,255,12), 2)
    

    你会得到这样的东西

    【讨论】:

    • 真的帮了很多忙。感谢您的出色回答。
    【解决方案3】:

    您可能需要使用一个函数来扩展您的代码,该函数将您的文本作为输入,position_x, position_y .. 它会测量字母的大小并根据它动态设置矩形宽度。

    您可以使用: cv2.getTextSize(文本, 字体, font_scale, 粗细)

    获取它将使用多少像素,然后使用它来定义矩形宽度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-01
      • 2018-12-21
      • 1970-01-01
      • 1970-01-01
      • 2021-07-24
      • 1970-01-01
      • 1970-01-01
      • 2020-08-04
      相关资源
      最近更新 更多