YOLOv8显示检测框中心点坐标
时间: 2025-05-09 14:18:13 浏览: 59
### 实现YOLOv8显示检测框中心点坐标的方法
为了实现在使用YOLOv8时显示检测框的中心点坐标,可以通过修改模型预测后的处理逻辑来完成。以下是具体方法:
#### 修改预测结果并计算中心点
在YOLOv8中,默认返回的是边界框(bounding box)的信息以及类别和置信度分数。对于矩形边界框而言,通常会提供左上角和右下角的坐标 \( (x_1, y_1), (x_2, y_2) \),通过简单的算术运算即可得出中心点坐标。
中心点坐标的计算公式如下:
\[
(x_{center}, y_{center}) = \left( \frac{x_1 + x_2}{2}, \frac{y_1 + y_2}{2} \right)
\]
此公式的应用可以直接嵌入到后处理阶段[^1]。
#### 使用 `plotting.py` 或其他绘图工具绘制中心点
如果需要将中心点标注在图像上,则可以利用 OpenCV 的 `cv2.circle()` 函数,在图像中标记出中心点的位置。同时也可以借助 `cv2.putText()` 将具体的坐标值打印出来[^4]。
下面是一个完整的 Python 脚本示例,展示如何获取并显示检测框的中心点坐标:
```python
import cv2
from ultralytics import YOLO
def draw_center_point(image, bbox, color=(0, 255, 0)):
"""
绘制检测框的中心点。
参数:
image: 输入图像
bbox: 边界框列表 [x1, y1, x2, y2]
color: 圆的颜色,默认绿色
返回:
None
"""
x1, y1, x2, y2 = map(int, bbox[:4]) # 获取边界框坐标
center_x = int((x1 + x2) / 2) # 计算中心点X坐标
center_y = int((y1 + y2) / 2) # 计算中心点Y坐标
cv2.circle(image, (center_x, center_y), radius=5, color=color, thickness=-1) # 绘制圆圈标记中心点
cv2.putText(image, f"({center_x},{center_y})", (center_x + 5, center_y + 5), cv2.FONT_HERSHEY_SIMPLEX, 0.5, color, 2)
model = YOLO('yolov8n.pt') # 加载预训练模型
image_path = 'test.jpg' # 测试图片路径
results = model.predict(source=image_path)[0] # 进行推理
img = cv2.imread(image_path) # 读取原始图像
for result in results.boxes.data.tolist():
x1, y1, x2, y2, score, cls_id = result # 解析边界框数据
if score > 0.5: # 只保留高置信度的结果
draw_center_point(img, [x1, y1, x2, y2])
cv2.imwrite("output_with_centers.jpg", img) # 保存带有中心点的图像
```
上述脚本实现了以下功能:
1. **加载模型**:从 Ultralytics 提供的标准权重文件初始化 YOLOv8 模型。
2. **解析边界框信息**:提取每个检测对象的边界框位置、置信度及分类 ID。
3. **计算中心点**:基于边界框的两个顶点计算其中心点。
4. **可视化中心点**:使用 OpenCV 工具库在原图上绘制圆形标志代表中心点,并附加文字说明其数值。
#### 输出中心点坐标至文档
除了在图像上直观呈现外,还可以进一步扩展程序以记录所有目标的中心点坐标到外部存储介质,比如 TXT 文件或者 CSV 表格。这一步骤可通过追加写模式打开文件流实现[^3]。
例如增加一段代码用于保存坐标信息:
```python
with open("centers.txt", "a") as file:
for result in results.boxes.data.tolist():
x1, y1, x2, y2, _, _ = result
cx = round((x1 + x2) / 2, 2)
cy = round((y1 + y2) / 2, 2)
file.write(f"{cx}, {cy}\n")
```
以上操作能够满足既定需求——即不仅可以在屏幕上看到各个物体对应的中心点,而且还能将其持久化存档以便后续分析或验证用途。
---
阅读全文
相关推荐


















