上一篇文章中,在Qt中配置了OpenCV的开发环境,并且添加了所需要的库文件,这篇文章,开始读取摄像头视频,并保存

要注意OpenCV2和OpenCV3的读取保存方法是有区别的,本文是基于OpenCV3的方法进行视频读取与保存

参考:http://blog.csdn.net/sinat_24206709/article/details/53152966

一、读取单个摄像头视频

在mainwindow.cpp中添加如下代码:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/opencv.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
using namespace cv;
MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);Mat input_image;VideoCapture cam(0);if (!cam.isOpened()) exit(0);namedWindow("摄像头");while (true) {cam >> input_image;imshow("input image", input_image);if (27 == waitKey(30))break;}
}
MainWindow::~MainWindow()
{delete ui;
}

运行后即可打开笔记本摄像头,并显示视频数据

如果有别的摄像头,可以插入,然后修改VideoCapture cam(0)中的0为1、2....即可

二、保存视频

在UI界面添加打开摄像头、保存视频、关闭摄像头、打开视频的按钮,效果如图所示

为了实现保存视频的功能,添加了定时器,实现隔一段时间来读取一帧,然后保存的效果,代码如下:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/opencv.hpp>
#include <opencv2/video.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
using namespace cv;
MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);timer = new QTimer(this);cam = NULL;OPEN = true;/*信号和槽*/connect(ui->OpenCameraBtn,SIGNAL(click()),this,SLOT(on_OpenCameraBtn_clicked()));//打开摄像头按钮connect(ui->TakePicBtn,SIGNAL(click()),this,SLOT(on_TakePicBtn_clicked()));//保存视频按钮connect(ui->CloseCameraBtn,SIGNAL(click()),this,SLOT(on_CloseCameraBtn_clicked()));//关闭摄像头按钮connect(ui->OpenVideoBtn,SIGNAL(click()),this,SLOT(on_OpenVideoBtn_clicked()));//打开视频按钮connect(timer,SIGNAL(timeout()),this,SLOT(getFrame()));
}
/*****************************************打开摄像头****************************************/
void MainWindow::on_OpenCameraBtn_clicked()
{// 设置摄像头的拍摄属性为 分辨率640x480,帧率30fps
//    cam.set(CAP_PROP_FRAME_HEIGHT, 480);
//    cam.set(CAP_PROP_FRAME_WIDTH, 640);
//    cam.set(CAP_PROP_FPS, 30.0);//打开摄像头 从摄像头中获取视频cam.open(0);//开启定时器,每隔0.05秒刷新一次timer->start(50);
}
void MainWindow::getFrame()
{//读取摄像头信息 将读取回来的帧转换成QImage类型//从摄像头中抓取并返回每一帧cam >> frame;//将抓取到的帧转换成QImage格式QImage img1 = QImage((const unsigned char*)frame.data, frame.cols, frame.rows, QImage::Format_RGB888).rgbSwapped();//个人测试时可以试试去掉.rgbSwapped()后的效果//将图片显示到QLabel上//ui->label->setPixmap(QPixmap::fromImage(img1));namedWindow("VideoPlay", WINDOW_NORMAL);imshow("VideoPlay", frame);waitKey(1000 / 30);
}
/*****************************************保存视频按钮*****************************************/
void MainWindow::on_TakePicBtn_clicked()
{if(!cam.isOpened())cam.open(0);//VideoWriter write("D:\\test.avi", VideoWriter::fourcc('M', 'J', 'P', 'G'), 30.0, Size(640, 480), true);write.open("D:\\test.avi",VideoWriter::fourcc('M', 'J', 'P', 'G'), 30.0, Size(640, 480), true);while(OPEN){cam >> frame;//设置保存视频的格式为AVI,编码为MJPGwrite.write(frame);        namedWindow("VideoPlay", WINDOW_NORMAL);imshow("VideoPlay", frame);waitKey(1000 / 30);}
}

三、关闭摄像头

/*****************************************关闭摄像头****************************************/
void MainWindow::on_CloseCameraBtn_clicked()
{timer->stop();cam.release();OPEN = false;write.release();destroyWindow("VideoPlay");
}

四、打开保存的视频

/*****************************************打开视频****************************************/
void MainWindow::on_OpenVideoBtn_clicked()
{VideoCapture video;Mat frame2;video.open("D:\\test.avi");while (video.isOpened()){video >> frame2;imshow("video", frame2);if (cvWaitKey(40) == 27)  //cvWaitKey的参数相当于多少ms一帧,现在是40ms一帧,1s25帧break;                //按ESC就退出}
}
MainWindow::~MainWindow()
{delete ui;
}

五、在mainwindow.h中添加槽函数和类的声明

private slots:void on_OpenCameraBtn_clicked();void getFrame();void on_TakePicBtn_clicked();void on_CloseCameraBtn_clicked();void on_OpenVideoBtn_clicked();
private:Ui::MainWindow *ui;Mat frame;//摄像头每次抓取的图像为一帧,使用该指针指向一帧图像的内存空间QTimer *timer;//定时器用于定时取帧,上面说的隔一段时间就去取就是用这个实现VideoCapture cam;VideoWriter write;bool OPEN;

Qt+OpenCV摄像头读取保存回放视频相关推荐

  1. opencv2读取摄像头并保存为视频

    opencv2读取摄像头并保存为视频 #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui/highgui ...

  2. opencv-python读取摄像头视频流保存为视频

    opencv-python读取摄像头视频流保存为视频文件 opencv-python version:4.4.0.46 代码如下: import cv2# 通过cv2中的类获取视频流操作对象cap c ...

  3. qt+opencv实现拍照,打开视频,图像处理操作

    最近小博甚是堕落,在做深度学习好久没有啥进展,哎,人生最苦莫过于程序员啊,今天这篇文章就来和大家一起学学QT吧,下面我用QT实现摄像头的拍照,录像,以及打开视频文件,图像处理等操作 qt主要是用来做界 ...

  4. opencv无法读取MP4格式视频

    用opencv对视频进行处理时,发现无法打开MP4格式的视频,解决方法为将opencv安装包对应的ffmepg链接库放入相应的工程文件夹内就可以了.(opencv_ffmpeg342_64.dll库文 ...

  5. Opencv读取视频、打开摄像头、保存视频和视频倒放

    原文出处:https://blog.csdn.net/yang_xian521/article/details/7440190 看了这个觉得说得很对,说白了Opencv主要针对是图像处理的计算机视觉库 ...

  6. 利用OpenCV读取和写入视频

    简 介: 本文介绍了如何对三种不同的视频源(视频文件, 序列图片以及网络摄像头)来进行读取显示视频,使用视频捕获对象. 也给出了如何通过视频捕获对象获取视频流的重要元数据. 介绍了使用视频写入对象把视 ...

  7. 【javaCV基于虹软人脸识别demo添加电脑摄像头人脸识别(图片保存,视频保存,摄像头显示等 )(附源码)】

    javaCV基于虹软人脸识别demo添加电脑摄像头人脸识别(图片保存,视频保存,摄像头显示等 )(附源码) 文章目录 javaCV基于虹软人脸识别demo添加电脑摄像头人脸识别(图片保存,视频保存,摄 ...

  8. opencv基本操作二(读取视频流与保存视频、读取摄像头并保存视频)

    opencv基本操作二 要点 代码 例程一 例程二 要点 opencv常用读视频函数 cv2.VideoCapture .cv2.VideoCapture.get 等,可以参考这里 opencv常用写 ...

  9. OpenCv图像处理之图像视频摄像头读取和保存

    OpenCv图像处理之图像视频摄像头读取与保存 使用cv::imread()读取图片 使用cv::imwrite()存储图片 使用cv::VideoCapture::open()读取视频 使用cv:: ...

最新文章

  1. 出色管理者的时间管理
  2. 论电子计算机在审计中的应用,计算机技术在审计中的应用领域分析.doc
  3. CWDM/DWDM是城域网最好的选择吗?
  4. Loadrunner无法打开浏览器的相关问题
  5. fckeditor2.63 上传图片的一个问题的解决办法
  6. pip升级后Import Error:cannot import name main解决方案
  7. 获取Android手机的分辨率通过ADB命令
  8. solidity事件详解
  9. disperse函数 C语言,武汉工业学院电气1006班C语言测试题.doc
  10. 微信小程序js数组初始化_微信小程序 数组(增,删,改,查)等操作实例详解...
  11. Linux下基于 Docker 搭建 MySQL 主从复制(1 Master+2 Slave)
  12. jdk 安装_Linux安装JDK操作手册
  13. 修复老相片_将老相片数码化
  14. 两组回归系数差异检验_调节效应检验中的回归系数差异检验
  15. 2019西安交大计算机专业研究生分数线,西安交通大学2019年考研分数线公布
  16. 计算机运行速度靠什么,怎么让电脑运行速度变快?一招搞定
  17. Python学习之路(四)——Python核心编程3(面向对象、模块_包_异常)
  18. 线性代数学习笔记——第四十讲——n维向量空间的概念
  19. WIN10 系统重新安装 WIN7 系统步骤
  20. 谈谈创业公司给服务器放在云端的优势和缺陷

热门文章

  1. 面试百问:如何提高自动化测试脚本稳定性
  2. 前端案例-30 Vue常用特性案例汇总
  3. 程序员的算法课(6)-最长公共子序列(LCS)
  4. 为什么是三次握手和四次挥手
  5. idea新建maven工程没有artifacts
  6. 计算机专业方面期刊介绍--
  7. Python 路径操作
  8. 计算机组成原理简介-(一)概论
  9. C语言入门 九九乘法表
  10. golang报错: WaitGroup is reused before previous Wait has returned