在 Ultralytics YOLOv8 中修改预测框颜色为红色,以下是三种实用方案:
方案 1:直接修改 plot()
方法的 colors
参数
在调用 results.plot()
时直接指定颜色参数:
python
from ultralytics import YOLO
# 加载模型
model = YOLO("yolov8n.pt")
# 预测并绘制结果
results = model.predict("image.jpg")
plotted_img = results[0].plot(colors=(255, 0, 0)) # BGR格式:红色
# 保存或显示
plotted_img.show() # 直接显示
# plotted_img.save("output.jpg") # 保存结果
原理 :
plot()
方法的 colors
参数接受一个 BGR 元组 (B, G, R)
,(255, 0, 0)
表示红色。
方案 2:自定义调色板覆盖默认颜色
创建全红色的调色板并传递给 plot()
:
python
from ultralytics import YOLO
# 加载模型
model = YOLO("yolov8n.pt")
results = model.predict("image.jpg")
# 创建全红色调色板 (每个类别都是红色)
num_classes = len(model.names) # 获取类别总数
red_palette = [(255, 0, 0)] * num_classes # 每个类别分配红色
# 应用自定义调色板
plotted_img = results[0].plot(colors=red_palette)
plotted_img.show()
原理 :
YOLOv8 默认使用类别索引映射调色板颜色。此方案为所有类别强制指定红色。
方案 3:修改 Annotator
源码(高级)
直接修改 Ultralytics 的绘图工具类:
- 找到文件
ultralytics/utils/plotting.py
。 - 定位
Annotator
类中的box_label
方法。 - 将颜色生成逻辑改为固定红色:
python
# 原始代码 (约在 265 行附近)
color = color or [random.randint(0, 255) for _ in range(3)]
# 修改为固定红色
color = (255, 0, 0) # BGR: 红色
效果 :
全局所有预测框变为红色(需重新安装包或修改环境文件)。
额外方案:自定义后处理绘制
手动解析结果并绘制红色框:
python
import cv2
from ultralytics import YOLO
# 加载模型和图像
model = YOLO("yolov8n.pt")
img = cv2.imread("image.jpg")
results = model.predict(img)
# 手动绘制结果
for box in results[0].boxes:
x1, y1, x2, y2 = map(int, box.xyxy[0].tolist())
cv2.rectangle(img, (x1, y1), (x2, y2), (0, 0, 255), 2) # BGR红色 + 线宽2
# 显示结果
cv2.imshow("Red Boxes", img)
cv2.waitKey(0)
方案对比
方案 | 优势 | 适用场景 |
---|---|---|
方案 1 | 简单快捷,单行代码修改 | 临时快速调试 |
方案 2 | 不修改源码,控制所有类别颜色 | 需全局红色但保留类别文本 |
方案 3 | 永久生效 | 长期项目且需全局修改 |
额外方案 | 完全自定义绘制逻辑 | 需要复杂自定义的场景 |
选择方案时,优先推荐 方案 1 (临时使用)或 方案 2(保留类别文本的红色框)。如需永久生效,可用方案 3(注意备份源码)。