如何实现YOLOv8保存目标检测后的视频文件

本文介绍了如何使用Python的OpenCV和YOLOv8库进行视频目标检测,包括安装必要的库,加载YOLOv8模型,处理视频帧并进行目标检测,最后将结果保存到输出视频中并释放资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        首先安装所需的库和依赖项,确保你已经安装了OpenCV和YOLOv8的相关库和依赖项。你可以使用pip或conda来安装它们。
        其次加载YOLOv8模型,使用YOLOv8的训练权重文件和配置文件,加载模型并进行初始化。这可以通过使用适当的库函数来完成,例如OpenCV的dnn.readNetFromDarknet()。
        使用OpenCV的cv2.VideoCapture()函数打开要进行目标检测的视频文件。你需要提供视频文件的路径作为参数。
        创建输出视频文件:使用OpenCV的cv2.VideoWriter()函数创建一个输出视频文件,用于保存目标检测后的结果。你需要指定输出视频的路径、编解码器、帧率和分辨率等参数。
        逐帧进行目标检测,使用一个循环来逐帧读取视频文件,然后将每一帧送入YOLOv8模型进行目标检测。你可以使用OpenCV的cv2.imshow()函数将检测结果显示在屏幕上,或者将其绘制在原始帧上。
        将检测结果写入输出视频,将每一帧的检测结果写入输出视频文件。你可以使用OpenCV的cv2.VideoWriter()函数的write()方法来实现。最后释放资源,在处理完所有帧后,记得释放所有打开的视频文件和释放内存等资源。

具体代码如下:

import cv2
from ultralytics import YOLO


def yolo_pre():
    yolo=YOLO('./yolov8n.pt')
    video_path='C:\\Users\\25055\\Desktop\\测试2.mp4' #检测视频的地址
    cap = cv2.VideoCapture(video_path)  # 创建一个 VideoCapture 对象,用于从视频文件中读取帧
    # 获取视频帧的维度
    frame_width = int(cap.get(3))
    frame_height = int(cap.get(4))
    # 创建VideoWriter对象
    fourcc = cv2.VideoWriter_fourcc(*'mp4v')
    out = cv2.VideoWriter('C:\\Users\\25055\Desktop\\output.mp4', fourcc, 20.0, (frame_width, frame_height)) #保存检测后视频的地址

    while cap.isOpened():
        status, frame = cap.read()  # 使用 cap.read() 从视频中读取每一帧
        if not status:
            break
        result = yolo.predict(source=frame, save=True)
        result = result[0]
        anno_frame = result.plot()
        #cv2.imshow('行人', anno_frame)
        out.write(anno_frame) #写入保存
        # 注释的框架是通过调用 result.plot() 获得的,它会在框架上绘制边界框和标签。
        # 带注释的框架使用 cv2.imshow() 窗口名称“行人”显示。
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    cap.release()
    cv2.destroyAllWindows()
    print('保存完成')
    video_yolo_path='C:\\Users\\25055\Desktop\\output.mp4'
    return video_yolo_path

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JayGboy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值