yolov8+opencv目标检测
时间: 2025-06-30 22:13:51 浏览: 7
### 使用YOLOv8与OpenCV实现目标检测
通过结合YOLOv8和OpenCV,可以高效地完成实时目标检测任务。以下是具体方法以及示例代码。
#### 方法概述
YOLOv8 是一种先进的目标检测框架,能够快速识别图像中的对象并标注其边界框。而 OpenCV 则提供了强大的图像处理功能,用于读取视频流、绘制边界框以及其他视觉化操作。两者结合可实现实时的目标检测应用[^1]。
#### 示例代码
以下是一个完整的 Python 脚本,展示如何利用 YOLOv8 和 OpenCV 进行目标检测:
```python
import cv2
from ultralytics import YOLO
# 初始化YOLOv8模型
model = YOLO('yolov8n.pt') # 加载预训练模型[^4]
# 打开摄像头或加载视频文件
cap = cv2.VideoCapture(0) # 参数为0表示打开默认摄像头;也可以传入视频路径
while cap.isOpened():
success, frame = cap.read() # 逐帧读取视频
if not success:
break # 如果无法获取下一帧,则退出循环
# 对当前帧执行推理
results = model(frame)[0] # 获取预测结果
# 遍历检测到的对象,并在原图上绘制边界框
for box in results.boxes.data.tolist():
x1, y1, x2, y2, score, class_id = map(int, box[:6])
# 绘制矩形框
cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 2)
# 添加标签文字
label = f"{results.names[class_id]} {score:.2f}"
t_size = cv2.getTextSize(label, 0, fontScale=1, thickness=2)[0]
c2 = x1 + t_size[0], y1 - t_size[1] - 3
cv2.rectangle(frame, (x1, y1), c2, color=(0, 255, 0), thickness=-1, lineType=cv2.LINE_AA)
cv2.putText(
frame,
label,
(x1, y1 - 2),
cv2.FONT_HERSHEY_SIMPLEX,
fontScale=1,
color=(255, 255, 255),
thickness=2,
lineType=cv2.LINE_AA
)
# 显示带有检测结果的画面
cv2.imshow("Object Detection", frame)
# 按下 'q' 键退出程序
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 清理资源
cap.release()
cv2.destroyAllWindows()
```
上述代码实现了以下几个核心功能:
1. **初始化YOLOv8模型**:使用 `ultralytics` 库加载预训练的 YOLOv8 模型。
2. **捕获视频流**:通过 OpenCV 的 `VideoCapture` 接口访问摄像头或其他视频源。
3. **目标检测**:调用 YOLOv8 模型对每一帧进行推断,返回检测结果。
4. **绘制裁剪框**:根据检测结果,在原始画面中标记出每个目标的位置及其类别名称[^3]。
#### 关键技术点解析
- **YOLOv8 模型加载**:可以通过指定 `.pt` 文件名来选择不同版本的 YOLOv8 模型(如 `yolov8s.pt`, `yolov8m.pt` 等),以适应不同的性能需求。
- **OpenCV 图像显示**:借助 `imshow()` 函数将每帧的结果实时渲染至窗口中。
- **透视变换矩阵计算**:如果需要进一步分析车辆的速度或者轨迹热力图,可通过 `getPerspectiveTransform` 计算变换矩阵。
---
###
阅读全文
相关推荐


















