Opencv(C++)笔记--打开摄像头、保存摄像头视频

2023-11-17

1--打开摄像头

关键代码语句:

① VideoCapture cam(0);

② cam.read(img);

③ imshow("cam", img);

# include<opencv2/opencv.hpp>
# include<cstdio>
using namespace cv;
using namespace std;

int main(int argc, char *argv[]){
    // 打开摄像头
    VideoCapture cam(0); 
    if (!cam.isOpened()){
        cout << "cam open failed!" << endl;
        getchar();
        return -1;
    }

    cout << "cam open success!" << endl;
    namedWindow("cam");
    Mat img;

    for(;;){
        cam.read(img); // 读帧
        if (img.empty()) break; 
        imshow("cam", img); // 显示每一帧

        if (waitKey(5) == 'q') break; // 键入q停止
    }

    return 0;
}

2--保存摄像头视频

关键代码:

①VideoWriter vw

②vw.open():fourcc指定编码格式(常见编码方式)、fps指定帧率、Size指定大小

③vw.write()

# include<opencv2/opencv.hpp>
# include<cstdio>
using namespace cv;
using namespace std;

int main(int argc, char *argv[]){
    // 打开摄像头
    VideoCapture cam(0); 
    if (!cam.isOpened()){
        cout << "cam open failed!" << endl;
        getchar();
        return -1;
    }
    cout << "cam open success!" << endl;

    namedWindow("cam");
    Mat img;
    VideoWriter vw;
    int fps = cam.get(CAP_PROP_FPS); // 获取原视频的帧率
    if (fps <= 0) fps = 25;
    
    vw.open("./out1120.avi",
        VideoWriter::fourcc('X', '2', '6', '4'),
        fps,
        Size(cam.get(CAP_PROP_FRAME_WIDTH), 
            cam.get(CAP_PROP_FRAME_HEIGHT))
        );

    if (!vw.isOpened()){ // 判断VideoWriter是否正常打开
        cout << "videoWriter open failed!" << endl;
        getchar();
        return -1;
    }
    cout << "videoWriter open sucess!" << endl;
    for(;;){
        cam.read(img); // 读帧
        if (img.empty()) break; 
        imshow("cam", img); // 展示当前帧
        /* 
        这里可以添加对当前帧的处理操作
        */
        vw.write(img); // 保存当前帧
        if (waitKey(5) == 'q') break; // 键入q停止
    }

    return 0;
}

注:在Windows上执行上述代码可能会报以下错误:

解决方法:在输出的网址下载对应版本的库文件,放在执行文件.exe的同级目录即可,或者将该dll文件的路径添加到系统变量path中。

 结果:生成的out1120.avi可以正常播放;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Opencv(C++)笔记--打开摄像头、保存摄像头视频 的相关文章

随机推荐

  • esp32开发板学习

    1 esp32简介 esp32说到底就是一个小型的linux 可以执行我们的代码 尺寸只有一个苹果watch se的大小 可以集成各个物理组件 好像是通过开发板上的引脚来操作的 2 开发板部署python环境 2 1 在pdd花10块钱买了
  • 关闭文件指针不对

    浏览代码时看到下面几行代码 大家看看有啥问题 其中隐含的问题是关闭空的文件指针 所以写了一个测试代码 运行一下 挂了
  • C++模板类重载"<<"未定义错误

    在使用C 的模板类进行编程的时候 重载 lt lt 运算符时 如果定义不当 会出现未定义的情况 错误为LNK2019 这个问题的原因是由于C 的模板编译机制造成的 解决问题的方式是在类中声明 lt lt 运算符时 需要在运算符和参数之间的位
  • 【Python-利用动态二维码传输文件(五)】动态二维码文件发送端开发,使用Tkinter filedialog实现任意格式文件选中,并显示发送状态

    之前四篇文章论证了利用二维码传输文件的可行性 本章使用tkinter开发 动态二维码文件发送端 发送端具备文件选择 开始发送文件 停止发送文件以及显示发送状态的功能 程序界面下 这里下载源码运行 使用tkinter开发动态二维码文件发送端
  • 【JVM】JVM 垃圾收集器与内存分配策略

    JVM 垃圾收集器与内存分配策略 由JVM内存区域可知Java运行时内存的各个区域 其中程序计数器 虚拟机栈 本地方法栈3个区域随线程而生 随线程而灭 当方法结束或者线程结束时 内存就会跟着被回收了 而只有处于运行期间 我们才能知道程序究竟
  • 在IMX8MM平台linux下开发rm67191屏驱动

    NXP IMX8M MINI rel imx 4 14 98 2 0 0 ga 屏芯片 rm67191 屏调试记录 1 不能挂设备 设备树删除ADV7535屏的配置adv bridge 不通编译通过 结果按 https community
  • 一起来看看一个体系完善的前端React组件库是如何搭建出来的!

    作者简介 剑桥 携程资深前端开发工程师 关注自动化工具开发 前端工程自动构建相关技术 随着前端工程的发展 组件化的思想早已深入人心 现代的前端框架React Vue等 都是围绕组件设计 组件化的开发模式 大大提高了开发效率 设计和开发高质量
  • 增长率用计算机怎么算,操作方法:Excel使用公式来计算增长率教程

    有关使用公式计算增长率的Excel教程 Excel经常需要使用公式来计算增长率 如何使用公式来计算增长率 以下是有关使用公式计算增长率的excel教程 希望阅读后能为您带来启发 Excel使用公式来计算增长率教程 计算增长率步骤1 在单元格
  • A Survey on Large Language Models for Recommendation

    本文是LLM系列的文章 针对 A Survey on Large Language Models for Recommendation 的翻译 大模型用于推荐的综述 摘要 1 引言 2 建模范式和分类 3 判别式LLM用于推荐 4 生成式L
  • 关于使用Mybatis时实体类字段切记要使用包装类型

    每周的博客从5月份有开始断更了 看来坚持每周写一篇博客缺失很难 不过从这周开始 除了一方面把之前的那几周没写的博客补回来 另一方面从这周开始要真正逼自己的写一篇博客 并争取在7月份前搭建起自己的个人博客网站 好 废话少说 接下来快速进入今天
  • 线性表的顺序表示--王道2024DS习题代码

    2024年王道数据结构考研复习指导第二章 线性表的顺序表示 课后综合应用题个人学习的相关运行代码 include
  • 详解Matplotlib中文字符显示问题

    文章目录 1 中文字体显示问题 2 几种解决方案 2 1 在绘图代码中设置全局字体 2 2 在绘图代码中设置局部字体 2 3 修改本机字符默认配置字体 2 4 自动区别系统然后选择字体 3 其他 3 1 platform模块 3 2 常见中
  • Latex 乘号 分号

    Latex 乘号 分号 frac 分号 times 乘号 举例
  • 在 QT Creator 上配置 opencv 环境的一些认识和注意点

    在 QT Creator 上配置 opencv 环境的一些认识和注意点 一 OpenCV4 QT Creator Cmake 我参考的视频是 https www bilibili com video BV163411b7mg spm id
  • Go redis操作

    Go redis的操作 五种数据结构的基本操作汇总 一 String 操作 命令 说明 Set key value 给数据库中名称为 key 的 string 赋予值 valueget key 返回数据库中名称为 key 的 string
  • 系统架构主题之七:基于架构的软件设计方法及应用

    1 基于架构的软件设计方法概念 关键词 ABSD 自顶向下 递归迭代 与需求同步 设计元素 视角与视图 用例和质量场景 预期和非预期等 总的来讲 ABSD方法分为如下六个大的阶段 1 体系结构需求阶段 相比传统软件系统设计 架构设计在需求获
  • Centos7 命令行安装JDK步骤

    在国内 甲骨文公司的jdk下载的速度是很慢的 这里建议使用国内华为云的jdk 两者没有区别 就是做了一个搬运工作 对国内使用JDK环境的人来说非常友好 第一步 选择自己合适的JDK版本 网站在下面给出 https repo huaweicl
  • 【数据库】JDBC编程

    前言 小亭子正在努力的学习编程 接下来将开启javaEE的学习 分享的文章都是学习的笔记和感悟 如有不妥之处希望大佬们批评指正 同时如果本文对你有帮助的话 烦请点赞关注支持一波 感激不尽 目录 前言 什么是JDBC JDBC工作原理 JDB
  • 杰里之内置触摸按键配置篇

    关于内置触摸按键感应原理 内置触摸按键检测模块是利用人体分布电容对触摸按键电容影响来进行按键检测的 如下图 当人体触摸外部电容按键时 IO 口外部电容增加 芯片内部的触摸感应模块可以检测到该电容 变化 从而检测到按键是否被按下 在没有触摸的
  • Opencv(C++)笔记--打开摄像头、保存摄像头视频

    1 打开摄像头 关键代码语句 VideoCapture cam 0 cam read img imshow cam img include