郭震 AI公众号:郭震AI

18 视频处理之视频分析与处理

发布日期:

最近更新:

分类: Opencv教程

预计阅读: 3 分钟

阅读次数: 0

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

整理说明

这篇内容怎么整理

郭震 · 2026-06-04

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

阅读路线

先按这条路线读

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

图文要点

先看本文图文节点

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

视频处理之视频分析与处理结构图查看大图
视频处理之视频分析与处理结构图

OpenCV 学习要把图像输入、处理步骤、检测结果和工程性能放在一起验证。阅读时可以按「视频分析概述 -> 常见的视频分析任务 -> OpenCV中的视频分析工具 -> 背景减除」建立结构,再回到正文里的代码、案例或指标做验证。

视频处理之视频分析与处理核对图查看大图
视频处理之视频分析与处理核对图

读完后,用一个真实小任务复查:输入是什么,处理环节在哪里,输出是否可验收;失败时先查「视频分析概述」,再查「常见的视频分析任务」。

在前一篇文章中,我们探讨了视频对象跟踪的基本概念与实现方法。本篇将重点关注视频分析与处理的技术与应用,旨在帮助读者理解如何在视频流中提取有价值的信息,以及如何对视频进行各种处理操作。

视频分析概述

视频分析是从输入的视频流中提取关键信息的过程。它可以包括对象识别、动作识别、行为分析等多种任务。视频分析通常是实现智能监控、交通流量分析以及体育赛事分析等应用的核心技术。

常见的视频分析任务

  1. 对象检测:识别并定位视频帧中的特定对象。
  2. 行为识别:分析对象在视频中的行为模式。
  3. 场景理解:对视频中的场景进行语义分割和理解。

OpenCV中的视频分析工具

OpenCV为视频分析提供了一系列强大的工具和算法。以下是一些常用的功能:

  • 背景减除:识别视频流中的动态对象。
  • 特征提取和匹配:获取关键点并进行匹配分析。
  • 光流法:计算对象间相对运动。

背景减除

背景减除是一种常见的视频分析技术,用于在固定背景下识别动态对象。OpenCV中提供了多种背景减除算法,如MOG2KNN

以下是一个使用MOG2进行背景减除的示例代码:

import cv2

# 创建视频捕捉对象
cap = cv2.VideoCapture('video.mp4')

# 创建背景减除器
backSub = cv2.createBackgroundSubtractorMOG2()

while True:
    ret, frame = cap.read()
    if not ret:
        break

    # 应用背景减除
    fgMask = backSub.apply(frame)

    # 显示结果
    cv2.imshow('Frame', frame)
    cv2.imshow('FG Mask', fgMask)

    keyboard = cv2.waitKey(30)
    if keyboard == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

特征提取与匹配

特征提取技术被广泛用于视频分析中,尤其是在对象检测与识别中。OpenCV提供了多种特征检测算法,例如ORBSIFTSURF。下面是基于ORB算法进行特征提取与匹配的代码样例:

import cv2

# 读取参考图像和视频流
img1 = cv2.imread('object.jpg', 0)  # 参考图像
cap = cv2.VideoCapture('video.mp4')

# 创建ORB检测器
orb = cv2.ORB_create()
kp1, des1 = orb.detectAndCompute(img1, None)

while True:
    ret, frame = cap.read()
    if not ret:
        break
    
    # 检测并计算特征
    kp2, des2 = orb.detectAndCompute(frame, None)
    
    # 使用BFMatcher进行特征匹配
    bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)
    matches = bf.match(des1, des2)
    
    # 绘制匹配结果
    frame_matches = cv2.drawMatches(img1, kp1, frame, kp2, matches, None, flags=cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS)

    cv2.imshow('Matches', frame_matches)

    keyboard = cv2.waitKey(30)
    if keyboard == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

光流法

光流法用于计算图像序列中像素的运动。它非常适合用于跟踪移动对象。OpenCV提供calcOpticalFlowFarneback函数来实现光流计算。

视频分析处理判断卡查看大图
视频分析处理判断卡

做 OpenCV 视频分析时,先看帧率、分辨率、预处理、检测或跟踪算法、异常帧和输出保存。

import cv2

# 创建视频捕捉对象
cap = cv2.VideoCapture('video.mp4')

# 读取第一帧
ret, old_frame = cap.read()
old_gray = cv2.cvtColor(old_frame, cv2.COLOR_BGR2GRAY)
# 获取初始角点
p0 = cv2.goodFeaturesToTrack(old_gray, mask=None, maxCorners=100, qualityLevel=0.3, minDistance=7, blockSize=7)

# 创建掩膜图像用于绘制光流
mask = np.zeros_like(old_frame)

while True:
    ret, frame = cap.read()
    if not ret:
        break

    frame_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    
    # 计算光流
    p1, st, err = cv2.calcOpticalFlowPyrLK(old_gray, frame_gray, p0, None)
    
    # 选择确认为好的点
    good_new = p1[st==1]
    good_old = p0[st==1]

    # 绘制光流
    for i, (new, old) in enumerate(zip(good_new, good_old)):
        a, b = new.ravel()
        c, d = old.ravel()
        mask = cv2.line(mask, (a, b), (c, d), (0, 255, 0), 2)
        frame = cv2.circle(frame, (a, b), 5, (0, 0, 255), -1)

    img = cv2.add(frame, mask)
    cv2.imshow('Optical Flow', img)

    # 更新新的旧帧和角点
    old_gray = frame_gray.copy()
    p0 = good_new.reshape(-1, 1, 2)

    keyboard = cv2.waitKey(30)
    if keyboard == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()
视频处理之视频分析与处理应用复盘卡查看大图
视频处理之视频分析与处理应用复盘卡

学完《视频处理之视频分析与处理》后,不妨换一个自己的场景试一次,重点观察输入、处理和输出是否能对应起来。

视频处理之视频分析与处理应用检查卡查看大图
视频处理之视频分析与处理应用检查卡

如果想把《视频处理之视频分析与处理》用到自己的任务里,可以先缩小场景,只验证一个最关键的判断点。

总结

在本篇中,我们讨论了视频分析的基本概念和常用技术,包括背景减除特征提取与匹配以及光流法。这些工具不仅适用于简单的对象跟踪任务,也为复杂的视频分析奠定了基础。

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

《视频处理之视频分析与处理》这类内容容易被细节带偏。先看图里的主线,再回到正文核对环境、输入、输出和判断标准。

在下一篇文章中,我们将深入探讨如何与深度学习框架集成,以实现更复杂的视觉任务,如目标检测和分类。请继续关注我们的系列教程!

继续阅读

从这篇继续找到相关教程

AI 教程总索引

常见问题

读前先确认这三点

视频处理之视频分析与处理适合谁读?

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

读这篇OpenCV教程要多久?

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

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

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

分享文章

转发到常用平台

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

相关教程

AI 教程总索引

继续阅读

继续找到相关 AI 教程

返回栏目

Reader Messages

读者留言

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

最多 800 字

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

0/800

留言列表

0
正在加载留言...