OpenCV 视频文件读取

一、知识点
1、VideoCapture类

(1)、用于从视频文件、摄像机或图像序列中捕获视频帧。

(2)、构造函数 VideoCapture(const String & filename, int apiPreference = CAP_ANY)

a、filename可以是视频文件的名称(例如"video.avi"),可以是图像序列(例如"img%02.jpg", 它将读取"img00.jpg"、"img01.jpg"、"img02.jpg"等),还可以是URL。

b、apiPreference是实际执行捕获的API后端,VideoCaptureAPIs枚举值,如: CAP_ANY、CAP_FFMPEG、CAP_IMAGES等。

(3)、构造函数 VideoCapture(int index, int apiPreference = CAP_ANY)

a、打开摄像头进行视频拍摄。

b、index是视频捕获设备的索引,默认摄像头传递0。

c、apiPreference是实际执行捕获的API后端,VideoCaptureAPIs枚举值,如: CAP_ANY、CAP_FFMPEG、CAP_IMAGES等。

(4)、成员函数 virtual bool read(OutputArray image)

a、抓取、解码并返回一个视频帧。

b、image为返回的视频帧。 如果没有抓取任何帧,则图像为空,返回false。

(5)、成员函数 virtual void release();

a、关闭视频文件或捕获设备。

二、示例代码

cpp 复制代码
#include <iostream>
#include <opencv2/opencv.hpp>


int main()
{
    cv::VideoCapture capture("../images/video.mp4");
    cv::Mat frame;

    while (true)
    {
        capture.read(frame);
        if (frame.empty())
        {
            break;
        }

        //此处可以对frame做各种处理...

        cv::imshow("frame sequence", frame);

        int c = cv::waitKey(1);
        if (c == 27)
        {
            break;
        }
    }

    capture.release();
    
    system("pause");
    return 0;
}

++下一章,讲解视频处理与保存。++

相关推荐
子夜江寒几秒前
基于 OpenCV 的图像边缘检测与轮廓分析
图像处理·opencv·计算机视觉
草莓熊Lotso1 分钟前
Linux 2.6 内核 O(1) 调度队列深度解析:为什么它能实现常数时间调度?
linux·运维·服务器·数据结构·人工智能·哈希算法·散列表
渡我白衣1 分钟前
从森林到梯度——梯度提升树的原理、调参与实战
人工智能·深度学习·神经网络·目标检测·机器学习·计算机视觉·自然语言处理
Dylan的码园3 分钟前
稀疏 MoE 与原生多模态双驱:2025 大模型技术演进全景
人工智能·机器学习·ai作画·数据挖掘·boosting·oneflow
_-CHEN-_3 分钟前
Prompt Manager: 让你的 AI 提示词管理更专业
人工智能·prompt
weixin_397578024 分钟前
Transformer 架构 “Attention Is All You Need“
人工智能
檀越剑指大厂5 分钟前
AI 当主程还能远程开发?TRAE SOLO 的实用体验与cpolar内网突破
人工智能
哥只是传说中的小白7 分钟前
无需验证手机Sora2也能用!视频生成,创建角色APi接入教程,开发小白也能轻松接入
数据库·人工智能
lkbhua莱克瓦248 分钟前
参数如何影响着大语言模型
人工智能·llm·大语言模型
saoys11 分钟前
Opencv 学习笔记:图像膨胀 / 腐蚀(附滑块动态调节腐蚀核大小)
笔记·opencv·学习