yolov8绘制检测框
时间: 2025-06-30 13:29:05 浏览: 10
### 实现YOLOv8检测结果可视化的方案
为了实现在YOLOv8中的检测框绘制,通常会利用Python图像处理库Pillow或者OpenCV来完成这一操作。下面提供了一种基于OpenCV的方式,在获取预测结果之后,通过遍历这些结果并调用`cv2.rectangle()`函数在原始图片上画出矩形边界[^1]。
对于YOLOv8而言,假定已经得到了模型推理的结果列表,其中包含了每个物体的位置坐标(左上角x, 左上角y, 宽度w, 高度h)、类别以及置信度分数等信息。那么可以按照如下方式编写代码:
```python
import cv2
from ultralytics import YOLO
def draw_boxes(image_path, results):
img = cv2.imread(image_path)
for result in results:
box = result.boxes.xywh.cpu().numpy()[0] # 获取单个box的信息 (center_x, center_y, width, height)
top_left_corner = int(box[0] - box[2]/2), int(box[1] - box[3]/2) # 计算左上角位置
bottom_right_corner = int(top_left_corner[0]+box[2]), int(top_left_corner[1]+box[3]) # 右下角
label = f'{result.names[int(result.cls)]} {float(result.conf):.2f}' # 类别名称加上概率值作为标签文字
color = tuple(map(int, [255 * c for c in np.random.rand(3)])) # 随机颜色用于不同类别的区分显示
thickness = 2 # 边界线宽度设置为2像素
# 绘制边框
cv2.rectangle(img, top_left_corner, bottom_right_corner, color=color, thickness=thickness)
# 添加文本描述
font_scale = 0.5
text_size = cv2.getTextSize(label, cv2.FONT_HERSHEY_SIMPLEX, font_scale, thickness)[0]
text_origin = max(0, top_left_corner[0]), min(img.shape[0], top_left_corner[1]-text_size[1])
cv2.putText(img, label, org=text_origin, fontFace=cv2.FONT_HERSHEY_SIMPLEX,
fontScale=font_scale, color=(255, 255, 255), lineType=cv2.LINE_AA, thickness=thickness//2)
output_image_file = 'output_with_boxes.jpg'
cv2.imwrite(output_image_file, img)
model = YOLO('path/to/yolov8_model') # 加载预训练好的YOLOv8模型
results = model.predict(source='image_or_video_source', save=False, show_labels=True) # 执行预测得到结果对象
draw_boxes('input_image.jpg', results) # 调用自定义方法绘制边界框
```
上述脚本实现了读取输入图像文件、加载YOLOv8模型执行预测,并最终将带有标注的图像保存至指定路径的功能。值得注意的是,这里假设了`results`变量中存储着由YOLOv8返回的标准格式的数据结构;实际应用时可能需要根据具体API文档调整访问字段的方式[^2]。
阅读全文
相关推荐


















