OpenCV4(C++)—— 视频和摄像头的加载、显示与保存

这篇具有很好参考价值的文章主要介绍了OpenCV4(C++)—— 视频和摄像头的加载、显示与保存。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


一、加载与显示

  视频或摄像头的加载是使用 cv::VideoCapture 类。(这个类和 ifstream 类比较相似,视频或摄像头的加载和文本文件操作是大致相同。主要步骤:(1)加载(打开)视频或视像头。(2) 判断加载是否成功。 (3)读取内容。(4)关闭。)

注意:
  (1)VideoCapture类变量同时提供了可以查看视频属性的 get()函数 ,通过输入指定的标志来获取视频属性,例如视频的像素尺寸、帧数、帧率等。
  (2)在读取内容(每一帧图片)时,和ifstream一样,同样有多种方式,如通过“>>”运算符,或使用read成员函数等。但注意要使用 Mat类 来定义buffer。
  (3)当VideoCapture类变量中所有的图像都赋值给Mat类变量后,再次赋值的时候就是赋空值,故Mat类变量会变为空矩阵,因此可以通过 empty() 判断VideoCapture类变量中是否所有图像都已经读取完毕。
  (4)视频其实是每一帧图像的组成,所以显示也是连续显示每一帧图像,同样使用 imshow函数

代码如下(示例):文章来源地址https://www.toymoban.com/news/detail-739664.html

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

int main()
{

    // 和文本文件一样,两种打开方式:成员函数open和默认构造函数
    //cv::VideoCapture capVideo;
    //capVideo.open("C:/Users/Opencv/temp/123.mp4");
    cv::VideoCapture capVideo("C:/Users/Opencv/temp/123.mp4");
	
	// 打开摄像头,第一个参数为要打开的摄像头设备的ID,ID的命名方式从0开始。
	// cv::VideoCapture capVideo(0); // 打开第一个摄像头

    if (!capVideo.isOpened())
    {
        cout << "打开视频失败" << endl;
        return -1;
    }

    cout << "视频中图像的宽度=" << capVideo.get(cv::CAP_PROP_FRAME_WIDTH) << endl;
    cout << "视频中图像的高度=" << capVideo.get(cv::CAP_PROP_FRAME_HEIGHT) << endl;
    cout << "视频帧率=" << capVideo.get(cv::CAP_PROP_FPS) << endl;
    cout << "视频的总帧数=" << capVideo.get(cv::CAP_PROP_FRAME_COUNT);

    cv::Mat buffer;
    while (1) {
        capVideo >> buffer;
        if (buffer.empty())
        {
            break;
        }
        cv::imshow("video", buffer);
        //char key = cv::waitKey(1000 / capVideo.get(cv::CAP_PROP_FPS));  // 按源视频的帧率
        char key = cv::waitKey(30);  // 每帧延迟30毫秒。(由此可设置快放或慢放)

        if (key == 'q' || key == 27)
        {
            break;
        }    
    }
    capVideo.release();  //释放对象
    cv::destroyAllWindows();

二、保存

  (1)OpenCV中提供了 VideoWrite()类 用于实现多张图像保存成视频文件。该类的构造函数参数如下:

cv::VideoWriter output(filename, int fourcc, double fps, Size frameSize, bool  isColor=true)

filename::保存视频的具体路径,包含视频格式
fourcc:压缩帧的4字符编解码器代码。如JPEG编码('M','J','P','G'),但这个效果一般。常用的H.264 编码格式('H', '2', '6', '4')等。注:赋值“-1”则会自动搜索合适的编解码器
fps:保存视频的帧率,即视频中每秒图像的张数。可实现原视频二倍速播放、原视频慢动作播放等
frameSize:视频帧的尺寸。通常在设置时要与图像的尺寸相同,不然无法保存视频
isColor:保存视频是否为彩色视频,缺省为彩色

  (2)VideoWrite()和VideoCapture()一样,都可以通过isOpened()函数判断是否成功创建一个视频流,可以通过get()查看视频流中的各种属性。
  (3)在保存视频时,我们只需要将生成视频的图像一帧一帧通过“<<”操作符(或者write()函数)赋值给视频流即可,最后使用release()关闭视频流。

代码如下(示例):

#include <opencv2/opencv.hpp>  
#include<iostream>  

using namespace std;

int main()
{

    cv::VideoCapture capVideo("C:/Users/Opencv/temp/123.mp4");
    // cv::VideoCapture capVideo;
    // capVideo.open("C:/Users/Opencv/temp/123.mp4");

    if (!capVideo.isOpened())
    {
        cout << "打开视频失败" << endl;
        return -1;
    }

    cout << "视频中图像的宽度=" << capVideo.get(cv::CAP_PROP_FRAME_WIDTH) << endl;
    cout << "视频中图像的高度=" << capVideo.get(cv::CAP_PROP_FRAME_HEIGHT) << endl;
    cout << "视频帧率=" << capVideo.get(cv::CAP_PROP_FPS) << endl;
    cout << "视频的总帧数=" << capVideo.get(cv::CAP_PROP_FRAME_COUNT);

    int width = static_cast<int>(capVideo.get(cv::CAP_PROP_FRAME_WIDTH));
    int height = static_cast<int>(capVideo.get(cv::CAP_PROP_FRAME_HEIGHT));

    // cv::VideoWriter output("C:/Users/Opencv/temp/321.mp4", cv::VideoWriter::fourcc('M', 'J', 'P', 'G'), 25, cv::Size(width,height), true);
    cv::VideoWriter output("C:/Users/Opencv/temp/32331.mp4", cv::VideoWriter::fourcc('H', '2', '6', '4'), 25, cv::Size(width, height), true);

    if (!output.isOpened()) {
        // 处理无法创建输出视频文件的情况
        return -1;
    }

    cv::Mat buffer;
    while (capVideo.read(buffer)) {

        //  可用一些方法对每一帧图片进行处理

        output.write(buffer); // 再将当前帧写入输出视频
        //output << buffer;

        cv::imshow("show",buffer);
        char key = cv::waitKey(1000 / capVideo.get(cv::CAP_PROP_FPS));  // 按源视频的帧率
        if (key == 'q' || key == 27)
        {
            break;
        }
    }
    capVideo.release();  //释放对象
    cv::destroyAllWindows();
    return 0;
}

到了这里,关于OpenCV4(C++)—— 视频和摄像头的加载、显示与保存的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OpenCV 视频处理(关于摄像头和视频文件的读取、显示、保存等等)

    OpenCV不仅能够处理图像,还能够处理视频 视频是由大量的图像构成的 ,这些图像是以固定的时间间隔从视频中获取的。这样,就能够使用图像处理的方法对这些图像进行处理,进而达到处理视频的目的。要想处理视频,需要先对视频进行读取、显示、保存等相关操作。为此

    2024年03月14日
    浏览(48)
  • python+opencv实现显示摄像头,截取相关图片,录取相关视频

    实时显示摄像头图像 按下空格键,截取图片 按下tab键,开始录制摄像内容,再次按下,结束录制  按下Esc键,关闭窗口 截图:  可以添加函数来使图像的显示效果改变(边缘检测效果): 自行在对应的帧显示处调用:  

    2024年02月14日
    浏览(40)
  • C#使用OpenCv(OpenCVSharp)使用摄像头视频显示和录制及图片保存、本地视频显示

    本篇实例讲解基于OpenCvSharp实现了摄像头视频显示、录制及截图、视频保存,本地视频的显示功能。 目录 创建winform项目添加控件 NuGet安装opencvsharp  代码  运行效果 实例实现过程

    2024年02月15日
    浏览(45)
  • OpenCV 实现读取摄像头、视频读取保存 (C++)

    重点语句:VideoCapture、imshow 原理:使用VideoCapture语句读取摄像头,再利用while一次次将VideoCapture所读取的数据利用imshow语句一帧帧地读取出来 重点语句:VideoWriter 原理:在摄像头读取完图之后,利用VideoWriter语句将图像保存为固定格式 通过加入一个循环语句,按空格将图片按

    2024年02月11日
    浏览(51)
  • 【Python】【OpenCV】视频帧和摄像头帧操作 and 窗口显示

    一、读取写入视频文件   二、捕获摄像头帧 和视频的读取写入没有什么差异,都是需要先创建一个VideoCapture Object来操作,下述是细微差别: 3   Line:VideoCapture(0),其中 0 代表设备,还可以1,2,3 分别代表不同的摄像头(如果存在),也可以输入网络摄像头,直接替换成

    2024年02月05日
    浏览(54)
  • OpenCV中读取、显示、保存摄像头视频讲解与实战(附Python源码)

    需要源码请点赞关注收藏后评论区留言私信~~~ OpenCV不仅能够处理图像,还能够处理视频。视频是由大量的图像构成的,这些图像以固定的时间间隔从视频中获取。这样,就能够使用图像处理的方法对这些图像进行处理,进而达到处理视频的目的。要处理视频,需要先对视频进

    2024年02月05日
    浏览(48)
  • OpenCV基础知识(9)— 视频处理(读取并显示摄像头视频、播放视频文件、保存视频文件等)

    前言: Hello大家好,我是小哥谈。 OpenCV不仅能够处理图像,还能够处理视频。视频是由大量的图像构成的,这些图像是以固定的时间间隔从视频中获取的。这样,就能够使用图像处理的方法对这些图像进行处理,进而达到处理视频的目的。要想处理视频,需要先对视频进行读

    2024年02月11日
    浏览(55)
  • VC++中使用OpenCV读取图像、读取本地视频、读取摄像头并实时显示

    最近闲着跟着油管博主murtazahassan,学习了一下LEARN OPENCV C++ in 4 HOURS | Including 3x Projects | Computer Vision,对应的Github源代码地址为:Learn-OpenCV-cpp-in-4-Hours OpenCV是一个开源的计算机视觉库,其官网地址为:https://opencv.org/,对应Github源码地址为:https://github.com/opencv/opencv,目前来说

    2024年01月17日
    浏览(58)
  • Opencv(C++)系列学习---读取视频文件和打开摄像头

    今天学习的这两个内容比较简单,话不多说,直接上代码! 目录 【1】读取视频文件 【2】摄像头读取视频 运行结果:  这段代码较为简单,有兴趣的同学也可以挑战一下,在视频读取上加个进度条,可以通过鼠标拖动进度条到指定位置,像平时我们用的视频播放器一样,主

    2024年02月16日
    浏览(51)
  • 4. QT环境下使用OPenCV(视频或摄像头读取显示在QLabel控件上)

    1. 说明 在用opencv处理图像时,图像的来源大部分情况下是从视频中读取过来的,视频可以是本地保存的视频,也可以是本地摄像头或者网络摄像头实时拍摄的视频。 效果展示: opencv读取视频 2. 具体操作 关于视频的读取,实际上也是从视频中将每一帧图像加载后,显示到Q

    2024年02月04日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包