图像中绘制边界框与标签

计算机视觉领域,对图像进行后处理以显示预测结果是一个常见的需求。这通常涉及到在图像上绘制边界框并为这些框添加标签。本文将介绍如何使用Python和OpenCV库的cv2.putText方法来实现这一功能。将通过一个示例来展示最终的实现效果。

如何在Python中绘制边界框标签

如果还没有一个模型,可以查看本文底部,将展示如何使用Roboflow Universe中的示例模型。要绘制边界框,需要以下信息:

  • 框的起始x坐标
  • 框的起始y坐标
  • 预测的宽度
  • 预测的高度

以下是想要添加边界框和标签的原始图像:

将使用上文中的“predictions”列表,该列表包含了所有必要的信息。可以根据需要替换下面的变量,以使项目中的代码正常工作。以下是需要绘制边界框并为每个边界框添加标签的代码:

import cv2 predictions = [...] # 在此处添加预测结果 for bounding_box in predictions['predictions']: x0 = bounding_box['x'] - bounding_box['width'] / 2 x1 = bounding_box['x'] + bounding_box['width'] / 2 y0 = bounding_box['y'] - bounding_box['height'] / 2 y1 = bounding_box['y'] + bounding_box['height'] / 2 start_point = (int(x0), int(y0)) end_point = (int(x1), int(y1)) cv2.rectangle(img, start_point, end_point, color=(0,0,0), thickness=1) cv2.putText( img, bounding_box["class"], (int(x0), int(y0) - 10), fontFace = cv2.FONT_HERSHEY_SIMPLEX, fontScale = 0.6, color = (255, 255, 255), thickness=2 ) cv2.imwrite("example_with_bounding_boxes.jpg", img)

这段代码将在图像上添加一个标签,显示预测的类别名称。(x, y)元组表示想要在图像上添加标签的位置。然后指定了一些其他属性:要使用的字体类型、字体大小、文本颜色(在例子中是黑色)以及文本的粗细(即文本的加粗程度)。

现在,所有的边界框都在顶部显示了标签。

设置模型(可选)

在上述指南中,围绕一个检测人和梯子的模型绘制了边界框标签。如果想使用人和梯子检测模型进行测试,首先需要注册Roboflow,然后访问“人和梯子宇宙数据集”。这个数据集附带了一个免费使用的训练好的模型。

点击侧边栏中的“模型”,向下滚动并复制看到的代码到一个Python文件中。代码看起来会像这样,其中包含API密钥:

from roboflow import Roboflow rf = Roboflow(api_key="API_KEY") project = rf.workspace().project("people-and-ladders") model = project.version(4).model

这段代码导入了模型。在底部添加一行新代码,以在本地文件上运行推理:

predictions = model.predict("image.jpg", confidence=50).json()

现在,“predictions”变量包含了模型返回的所有预测结果,这些结果的置信度等于或高于50%。现在有了一个模型,可以在其预测结果上绘制边界框和标签。

在本教程中,讨论了:

  • 如何使用Roboflow Universe使用一个训练好的公共模型;
  • 如何从模型中检索预测结果;
  • 如何在模型周围绘制边界框;
  • 如何在每个边界框上方绘制标签
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485