Qt+OpenCV摄像头读取保存回放视频
上一篇文章中,在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摄像头读取保存回放视频相关推荐
- opencv2读取摄像头并保存为视频
opencv2读取摄像头并保存为视频 #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui/highgui ...
- opencv-python读取摄像头视频流保存为视频
opencv-python读取摄像头视频流保存为视频文件 opencv-python version:4.4.0.46 代码如下: import cv2# 通过cv2中的类获取视频流操作对象cap c ...
- qt+opencv实现拍照,打开视频,图像处理操作
最近小博甚是堕落,在做深度学习好久没有啥进展,哎,人生最苦莫过于程序员啊,今天这篇文章就来和大家一起学学QT吧,下面我用QT实现摄像头的拍照,录像,以及打开视频文件,图像处理等操作 qt主要是用来做界 ...
- opencv无法读取MP4格式视频
用opencv对视频进行处理时,发现无法打开MP4格式的视频,解决方法为将opencv安装包对应的ffmepg链接库放入相应的工程文件夹内就可以了.(opencv_ffmpeg342_64.dll库文 ...
- Opencv读取视频、打开摄像头、保存视频和视频倒放
原文出处:https://blog.csdn.net/yang_xian521/article/details/7440190 看了这个觉得说得很对,说白了Opencv主要针对是图像处理的计算机视觉库 ...
- 利用OpenCV读取和写入视频
简 介: 本文介绍了如何对三种不同的视频源(视频文件, 序列图片以及网络摄像头)来进行读取显示视频,使用视频捕获对象. 也给出了如何通过视频捕获对象获取视频流的重要元数据. 介绍了使用视频写入对象把视 ...
- 【javaCV基于虹软人脸识别demo添加电脑摄像头人脸识别(图片保存,视频保存,摄像头显示等 )(附源码)】
javaCV基于虹软人脸识别demo添加电脑摄像头人脸识别(图片保存,视频保存,摄像头显示等 )(附源码) 文章目录 javaCV基于虹软人脸识别demo添加电脑摄像头人脸识别(图片保存,视频保存,摄 ...
- opencv基本操作二(读取视频流与保存视频、读取摄像头并保存视频)
opencv基本操作二 要点 代码 例程一 例程二 要点 opencv常用读视频函数 cv2.VideoCapture .cv2.VideoCapture.get 等,可以参考这里 opencv常用写 ...
- OpenCv图像处理之图像视频摄像头读取和保存
OpenCv图像处理之图像视频摄像头读取与保存 使用cv::imread()读取图片 使用cv::imwrite()存储图片 使用cv::VideoCapture::open()读取视频 使用cv:: ...
最新文章
- 出色管理者的时间管理
- 论电子计算机在审计中的应用,计算机技术在审计中的应用领域分析.doc
- CWDM/DWDM是城域网最好的选择吗?
- Loadrunner无法打开浏览器的相关问题
- fckeditor2.63 上传图片的一个问题的解决办法
- pip升级后Import Error:cannot import name main解决方案
- 获取Android手机的分辨率通过ADB命令
- solidity事件详解
- disperse函数 C语言,武汉工业学院电气1006班C语言测试题.doc
- 微信小程序js数组初始化_微信小程序 数组(增,删,改,查)等操作实例详解...
- Linux下基于 Docker 搭建 MySQL 主从复制(1 Master+2 Slave)
- jdk 安装_Linux安装JDK操作手册
- 修复老相片_将老相片数码化
- 两组回归系数差异检验_调节效应检验中的回归系数差异检验
- 2019西安交大计算机专业研究生分数线,西安交通大学2019年考研分数线公布
- 计算机运行速度靠什么,怎么让电脑运行速度变快?一招搞定
- Python学习之路(四)——Python核心编程3(面向对象、模块_包_异常)
- 线性代数学习笔记——第四十讲——n维向量空间的概念
- WIN10 系统重新安装 WIN7 系统步骤
- 谈谈创业公司给服务器放在云端的优势和缺陷