郭震 AI公众号:郭震AI

24 实践项目之实时物体检测

发布日期:

最近更新:

分类: Opencv教程

预计阅读: 3 分钟

阅读次数: 0

系列进度

OpenCV 教程 · 第 24 / 24

预计阅读3 分钟
结构重点4 个
图文要点6 张
正文规模1.2k 字

整理说明

这篇内容怎么整理

郭震 · 2026-06-04

独立整理围绕 4 个结构重点拆成环境、步骤、验证点和常见误区,尽量让读者能照着复现。
图文对照保留 6 张和配置、流程、判断结果有关的图片,方便快速定位正文重点。
持续校对工具、模型和命令变化较快,后续优先修正入口、参数和风险提醒。

阅读路线

先按这条路线读

先抓住主线,再回到代码、配置和图文细节,读起来会更稳。

图文要点

先看本文图文节点

按图先建立主线,再跳回正文核对步骤、配置和判断标准。

实践项目之实时物体检测结构图查看大图
实践项目之实时物体检测结构图

OpenCV 学习要把图像输入、处理步骤、检测结果和工程性能放在一起验证。阅读时可以按「项目概述 -> 环境准备 -> 实现步骤 -> 图像读取」建立结构,再回到正文里的代码、案例或指标做验证。

实践项目之实时物体检测核对图查看大图
实践项目之实时物体检测核对图

读完后,用一个真实小任务复查:输入是什么,处理环节在哪里,输出是否可验收;失败时先查「项目概述」,再查「环境准备」。

在本篇教程中,我们将深入探讨如何利用 OpenCV 实现实时物体检测。这是继我们上篇教程“车牌识别”之后的一个进阶项目,旨在让您对计算机视觉的应用有更深刻的理解。

项目概述

实时物体检测是计算机视觉中的一个重要领域,广泛应用于监控、自动驾驶和人机交互等场景。本项目将使用 OpenCV 和一个预训练的深度学习模型,您可以实时检测视频流中的物体(如行人、汽车和动物)。

实践项目之实时物体检测要点判断卡查看大图
实践项目之实时物体检测要点判断卡

读这篇时,可以把「项目概述 -> 环境准备 -> 实现步骤 -> 复查」当成一条检查线:先抓住对象、动作和判断依据,再回到案例、代码或指标里复查。

环境准备

在开始之前,请确保您的系统中已安装 OpenCV 和 NumPy库。您可以通过以下命令安装:

pip install opencv-python numpy

此外,我们将使用一个常见的深度学习模型:YOLO(You Only Look Once)。请下载 YOLOv3 权重文件和配置文件,它们可以在 YOLO 的 GitHub 页面YOLO 官网 上找到。

实现步骤

  1. 加载 YOLO 模型

首先,我们需要加载 YOLO 模型的配置文件和权重文件。接下来的代码片段展示了如何完成这一步。

import cv2
import numpy as np

# 加载 YOLO 模型
net = cv2.dnn.readNet("yolov3.weights", "yolov3.cfg")

# 获取层名称
layer_names = net.getLayerNames()
output_layers = [layer_names[i - 1] for i in net.getUnconnectedOutLayers()]
  1. 启动视频流

接着,我们将使用 OpenCV 提供的 VideoCapture 类来捕获实时视频流。

# 启动视频流
cap = cv2.VideoCapture(0)  # 0 表示默认摄像头

while True:
    # 读取视频流
    ret, frame = cap.read()
    if not ret:
        break

    height, width, _ = frame.shape
  1. 进行物体检测

在获取每一帧后,我们将通过 YOLO 模型进行物体检测。以下代码段展示了如何处理输入并获取检测结果。

    # 预处理输入数据
    blob = cv2.dnn.blobFromImage(frame, 0.00392, (416, 416), (0, 0, 0), True, crop=False)
    net.setInput(blob)
    detections = net.forward(output_layers)

    boxes = []
    confidences = []
    class_ids = []
    
    # 遍历检测结果
    for detection in detections:
        for obj in detection:
            scores = obj[5:]
            class_id = np.argmax(scores)
            confidence = scores[class_id]
            if confidence > 0.5:  # 置信度阈值
                center_x = int(obj[0] * width)
                center_y = int(obj[1] * height)
                w = int(obj[2] * width)
                h = int(obj[3] * height)

                # 计算边界框
                x = int(center_x - w / 2)
                y = int(center_y - h / 2)

                boxes.append([x, y, w, h])
                confidences.append(float(confidence))
                class_ids.append(class_id)
  1. 绘制检测边框

通过 NMS(非极大值抑制)去除重复检测后,我们将根据检测结果绘制边界框。

# 应用非极大值抑制
indexes = cv2.dnn.NMSBoxes(boxes, confidences, 0.5, 0.4)

# 绘制边界框
for i in range(len(boxes)):
    if i in indexes:
        x, y, w, h = boxes[i]
        label = str(classes[class_ids[i]])
        color = (0, 255, 0)
        cv2.rectangle(frame, (x, y), (x + w, y + h), color, 2)
        cv2.putText(frame, label, (x, y + 30), cv2.FONT_HERSHEY_PLAIN, 3, color, 3)

    # 显示结果
    cv2.imshow("Real-time Object Detection", frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
  1. 结束程序并释放资源

最后,我们要确保在完成检测后,正确释放视频流和窗口资源。

cap.release()
cv2.destroyAllWindows()
实践项目之实时物体检测应用复盘卡查看大图
实践项目之实时物体检测应用复盘卡

读到这里,可以把《实践项目之实时物体检测》整理成一张复盘表:先说清主线,再拿一个小任务检查结果。

实践项目之实时物体检测应用检查卡查看大图
实践项目之实时物体检测应用检查卡

读完《实践项目之实时物体检测》后,可以先挑一个小样例走完整流程,再判断哪些步骤已经能独立完成。

总结

通过本项目,我们学习了如何使用 OpenCV 和 YOLO 模型实现实时物体检测。此技术可以作为许多更加复杂应用的基础,比如自动驾驶、智能监控和机器人导航等。

OpenCV阅读地图卡查看大图
OpenCV阅读地图卡

读完《实践项目之实时物体检测》后,可以回头问三件事:它解决什么问题,哪一步最容易出错,自己能否拿一个小例子跑通。

在准备下一篇教程之前,您可以尝试修改阈值或添加更多的特征,以增强检测的效果和性能。感谢您的阅读,期待在下一篇关于“基于 OpenCV 的智能监控系统”的教程中与您再次相见!

继续阅读

从这篇继续找到相关教程

AI 教程总索引

常见问题

读前先确认这三点

实践项目之实时物体检测适合谁读?

这是 OpenCV 教程 系列第 24 / 24 篇,适合正在学习OpenCV 教程,并且需要把概念落到操作步骤或判断标准里的读者。

读这篇OpenCV教程要多久?

按中文技术文章阅读速度估算,通读大约 3 分钟;如果要跟着复现,建议把命令、配置和结果检查分开做。

这篇文章里的图文节点怎么用?

正文里有 6 个图文节点,可以先用它们抓住流程、配置和判断点,再回到对应段落细读。

分享文章

转发到常用平台

微信/朋友圈可先复制链接

相关教程

AI 教程总索引

继续阅读

继续找到相关 AI 教程

返回栏目

Reader Messages

读者留言

有问题、补充资料或实测结果,可以直接留下。这里不需要登录。

最多 800 字

为了防刷,每条留言会做长度、链接数量和提交频率限制。

0/800

留言列表

0
正在加载留言...