QT+opencv视频采集和存储Demo
来源:互联网 发布:四川广电网络 业务 编辑:程序博客网 时间:2024/05/01 21:13
本次bolg主要记录本人在做opencv+QT进行摄像头视频采集和存储实验时遇到的一些问题,并给出我的一些解决思路,希望能够帮助大家。
opencv视频采集是通过以下代码
VideoCapture video(0);
if(!video.isOpened())
{
cout << "Could not open video: "<< endl;
return -1;
}
视频保存是通过下述代码
videoRec.open("C:\\Users\\sz20150105\\Desktop\\VideoTest1.avi",CV_FOURCC('M','J','P','G'),30.0,Size(640,480));
上面红色加粗的是本次重点讲解地方。
网上出现有很多人出现保存视频失败,无法读取,或者视频文件为0字节等问题,很大可能是由于这里创建视频文件出现问题,关键问题就是视频编码格式设置错误。第二个参数主要设置如下:
CV_FOURCC('P', 'I', 'M', '1') = MPEG-1 codec
CV_FOURCC('M', 'J', 'P', 'G') = motion-jpeg codec
CV_FOURCC('M', 'P', '4', '2') = MPEG-4.2 codec
CV_FOURCC('D', 'I', 'V', '3') = MPEG-4.3 codec
CV_FOURCC('D', 'I', 'V', 'X') = MPEG-4 codec
CV_FOURCC('U', '2', '6', '3') = H263 codec
CV_FOURCC('I', '2', '6', '3') = H263I codec
CV_FOURCC('F', 'L', 'V', '1') = FLV1 codec
视频保存是通过下述代码
VideoWriter videoRec;
videoRec.open("C:\\Users\\sz20150105\\Desktop\\VideoTest1.avi",CV_FOURCC('M','J','P','G'),30.0,Size(640,480));
上面红色加粗的是本次重点讲解地方。
网上出现有很多人出现保存视频失败,无法读取,或者视频文件为0字节等问题,很大可能是由于这里创建视频文件出现问题,关键问题就是视频编码格式设置错误。第二个参数主要设置如下:
CV_FOURCC('P', 'I', 'M', '1') = MPEG-1 codec
CV_FOURCC('M', 'J', 'P', 'G') = motion-jpeg codec
CV_FOURCC('M', 'P', '4', '2') = MPEG-4.2 codec
CV_FOURCC('D', 'I', 'V', '3') = MPEG-4.3 codec
CV_FOURCC('D', 'I', 'V', 'X') = MPEG-4 codec
CV_FOURCC('U', '2', '6', '3') = H263 codec
CV_FOURCC('I', '2', '6', '3') = H263I codec
CV_FOURCC('F', 'L', 'V', '1') = FLV1 codec
然后本人在首次设置时,发现上诉参数设置全部无效,而将第二个参数设置为-1时,可以弹出windows编码设置,手动选定某一个编码后是可以成功保存视频的。经过查找资料以及实验本人发现,在vs2012+opencv2.4.13下上述参数是可以直接使用的,而在QT下却保存失败,经过分析,QT配置的opencv版本为2.4.9,且当初cmake进行源码编译采用的2.4.9;因此我怀疑是opencv版本过低或者是在cmake源码编译的时候没有勾上WIDTH_FFMPEG这个选项。
本人通过cmake重新编译opencv2.4.13版本就可以设定上诉几个参数进行保存。如果有读者遇到跟我一样的问题,请首先依次检查几个问题
1.确定是否是代码错误。
2.确定系统是否安装编码器ffmpeg,这个可以百度直接去官网下载。ffmpeg是一个强大的视频编解码开源库,也是一个专门研究的方向。
3.如果以上问题都确认后,果断怀疑opecv版本问题,建议大家使用2.4.13版本以上。
4.QT+opencv配置时要仔细确保编译是成功的,并且勾选正确。
下面给出源程序
1.确定是否是代码错误。
2.确定系统是否安装编码器ffmpeg,这个可以百度直接去官网下载。ffmpeg是一个强大的视频编解码开源库,也是一个专门研究的方向。
3.如果以上问题都确认后,果断怀疑opecv版本问题,建议大家使用2.4.13版本以上。
4.QT+opencv配置时要仔细确保编译是成功的,并且勾选正确。
下面给出源程序
#include <QApplication>#include <opencv2/highgui/highgui.hpp>#include <opencv2/imgproc/imgproc.hpp>#include <iostream>#include <QMessageBox>using namespace cv;using namespace std;int main(int argc, char *argv[]){ QApplication a(argc, argv); VideoWriter videoRec; VideoCapture video(0); bool recflag=false; MainWindow w; w.show(); int temp=CV_FOURCC('M','J','P','G'); cout<<temp<<endl; videoRec.open("C:\\Users\\sz20150105\\Desktop\\videoData\\VideoTest1.avi",CV_FOURCC('M','J','P','G'),30.0,Size(640,480)); if(!video.isOpened()) { cout << "Could not open video: "<< endl; return -1; } Mat frame; recflag=true; //writer("C:\\Users\\sz20150105\\Desktop\\VideoTest.avi",CV_FOURCC('M','J','P','G'),25.0,Size(640,480)); while(1) { video>>frame; if(frame.empty()) { cout<<"error"<<endl; continue; } imshow("window",frame); if(recflag) videoRec.write(frame); char c; c=waitKey(33); if(c==27||c=='q') { break; } if(c=='r') { recflag=false; videoRec.release(); } } return a.exec();}实验结果
0 0
- QT+opencv视频采集和存储Demo
- DirectShow视频采集和OpenCV
- QT+OPENCV视频采集 (原创,转载请标记!)
- Qt摄像头视频采集
- Qt开发:Qt+OpenCV在(Linux平台)PC上采集摄像头视频(源码奉送)
- OpenCV摄像头视频数据采集与RTSP和RTMP直播
- 【存档】QT和OpenCV 显示视频
- opencv+directshow采集视频图像
- OpenCV - 视频及图像采集
- opencv设置采集视频分辨率
- opencv视频采集封装qml
- Qt+OpenCV移植到arm上采集摄像头视频 请注意
- QT OpenCV 播放视频
- qt opencv 视频显示
- 视频采集和处理
- v4l2采集视频,opencv处理帧数据第一难关:qt的QImage转换为opencv的IplImage 函数代码实现
- opencv存储视频数据
- OpenCV学习——摄像头采集视频
- node.js学习(十八、URL模块)
- yeoman入门
- OpenCV图像直方图的理解和验证
- 运维笔记34 (lnmp+heartbeat高可用集群,drbd共享存储+Discuz论坛应用实战)
- 几种机器学习框架的对比和选择
- QT+opencv视频采集和存储Demo
- java对象内存管理的简单认识!
- 使用git bash上传代码到Github并忽略文件
- solr DataImportHandler 报错 Communications link failure
- Unity Shader-后处理:简单均值模糊
- Pandas 文本数据方法 partition( )
- C语言的点
- 【SQL】ROWNUM和ROWID
- Hadoop学习笔记2、集群网络规划及SSH免密码登录