OpenCV学习笔记(二)读取视频文件,双窗口显示与保存
来源:互联网 发布:剑三藏剑正太脸数据 编辑:程序博客网 时间:2024/04/30 11:55
这里主要是参照别人博客来修改实现的,其功能是读取2个视频文件,分别在两个窗口中播放,每个窗口都加入一个进度条,可以自行用鼠标控制播放进度。
一、系统环境
Windows7 64位
Visual Studio 2013 + OpenCV2.4.13
二、新建win32控制台程序,工程名为:video_test
注意要记得添加一个属性表(配置OpenCV),不懂的请参见我的博客OpenCV学习笔记(一):OpenCV2.4.13+VS2013环境配置
stdafx.h
//#define _CRT_SECURE_NO_DEPRECATE#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1#pragma once#include "targetver.h"#include <stdio.h>#include <tchar.h>// TODO: 在此处引用程序需要的其他头文件Note:放在最前面的两行代码,#define _CRT_SECURE_NO_DEPRECATE,#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1主要是为了解决如下图所示的bug:
原因是Visual C++ 2013使用了更加安全的 run-time library routines。这种微软的警告,主要因为那些C库的很多函数内部是不进行参数检测的(包括越界类的),微软担心使用这些会造成内存异常,所以就改写了同样功能的函数,改写了的函数进行了参数的检测,使用这些新的函数会更安全和便捷。关于这些改写的函数你不用专门去记忆,因为编译器对于每个函数在给出警告时,都会告诉你相应的安全函数,查看警告信息就可以获知,在使用时也再查看一下MSDN详细了解。
video_test.cpp
#include "stdafx.h"#include <iostream> #include <cv.h> #include <cxcore.h> #include <highgui.h> using namespace std;// 初始化进度条的位置 int g_slider_position1 = 0;int g_slider_position2 = 0;CvCapture* g_capture1 = NULL;//CvCapture结构体:存储图像捕获的信息CvCapture* g_capture2 = NULL;// 定义回调函数用于播放进度的控制 void onTrackbarSlide1(int pos1) //回调函数{cvSetCaptureProperty(g_capture1, CV_CAP_PROP_POS_FRAMES, pos1);//设置视頻获取属性, //CV_CAP_PROP_POS_FRAMES单位为帧数的位置}void onTrackbarSlide2(int pos2){cvSetCaptureProperty(g_capture2, CV_CAP_PROP_POS_FRAMES, pos2);}int _tmain(int argc, _TCHAR* argv[]){// 建立播放窗口 cvNamedWindow("Video Test 1", CV_WINDOW_AUTOSIZE);cvNamedWindow("Video Test 2", CV_WINDOW_AUTOSIZE);// 捕捉视频文件 g_capture1 = cvCreateFileCapture("E:\\VS 2013\\video_test\\video1.mp4");//通过参数设置, //确定要读入的视频文件g_capture2 = cvCreateFileCapture("E:\\VS 2013\\video_test\\video2.mp4");// 读取、显示视频文件的帧数 int frames1 = (int)cvGetCaptureProperty(g_capture1, CV_CAP_PROP_FRAME_COUNT); cout << "frames1 = " << frames1 << endl;// 建立进度条 if (frames1 != 0)cvCreateTrackbar("Position","Video Test 1",&g_slider_position1,frames1,onTrackbarSlide1);int frames2 = (int)cvGetCaptureProperty(g_capture2, CV_CAP_PROP_FRAME_COUNT);cout << "frames2 = " << frames2 << endl;if (frames2 != 0)cvCreateTrackbar("Position","Video Test 2",&g_slider_position2,frames2,onTrackbarSlide2);// 读取视频文件信息 double fps1 = (int)cvGetCaptureProperty(g_capture1, CV_CAP_PROP_FPS);//帧率double fps2 = (int)cvGetCaptureProperty(g_capture2, CV_CAP_PROP_FPS);CvSize size1 = cvSize((int)cvGetCaptureProperty(g_capture1, CV_CAP_PROP_FRAME_WIDTH), //视频1流中的帧宽度(int)cvGetCaptureProperty(g_capture1, CV_CAP_PROP_FRAME_HEIGHT));//视频1流中的帧高度CvSize size2 = cvSize((int)cvGetCaptureProperty(g_capture2, CV_CAP_PROP_FRAME_WIDTH),(int)cvGetCaptureProperty(g_capture2, CV_CAP_PROP_FRAME_HEIGHT));// 创建 VideoWriter CvVideoWriter* wrVideo1 = cvCreateVideoWriter("E:\\VS 2013\\video_test\\video3.avi", CV_FOURCC('M', 'J', 'P', 'G'), fps1, size1);CvVideoWriter* wrVideo2 = cvCreateVideoWriter("E:\\VS 2013\\video_test\\video4.avi", CV_FOURCC('M', 'J', 'P', 'G'), fps2, size2);int frs = 0;// 开始播放并保存视频 IplImage* frame1;IplImage* frame2;while (frs < frames1 && frs < frames2){// 获取、显示源文件的帧画面 frame1 = cvQueryFrame(g_capture1);if (!frame1) break;cvShowImage("Video Test 1", frame1);frame2 = cvQueryFrame(g_capture2);if (!frame2) break;cvShowImage("Video Test 2", frame2);// 保存:将当前帧写入到目标视频文件 cvWriteFrame(wrVideo1, frame1);cvWriteFrame(wrVideo2, frame2);// 若按下 ESC 键,则退出程序 char c = cvWaitKey(33);if (c == 27) break;}// 释放内存,关闭窗口 cvReleaseCapture(&g_capture1);cvReleaseCapture(&g_capture2);cvReleaseVideoWriter(&wrVideo1);cvReleaseVideoWriter(&wrVideo2);cvDestroyWindow("Video Test 1");cvDestroyWindow("Video Test 2");return 0;}跑一下基本没问题了,这样就可以读取两个视頻并显示出来了,然后去目录下就可以看到被保存的视频文件了。
0 0
- OpenCV学习笔记(二)读取视频文件,双窗口显示与保存
- OpenCV学习笔记(4)视频文件的读取与保存
- opencv学习笔记(2)视频文件的读取与保存
- OpenCV学习笔记(4)视频文件的读取与保存(2010-01-23 更新)
- OpenCV笔记3:视频文件的读取与保存
- OpenCV学习笔记-读取视频文件
- OpenCV学习笔记(一):读取、显示、保存图片
- OpenCV学习笔记(一):读取、显示、保存图片
- OpenCV学习笔记(一):读取、显示、保存图片
- OpenCV学习笔记(一):读取、显示、保存图片
- OpenCV学习笔记(一):读取、显示、保存图片
- OpenCV学习(二)读取视频文件和摄像头
- opencv 读取、修改、保存视频文件
- 【OpenCV学习笔记】三、图像读取、显示及保存
- OpenCV(学习笔记6)-视频读取与显示
- opencv学习笔记(1)——读取路径显示图片和保存jpg图片
- python opencv 读取视频文件并保存
- OpenCV学习笔记(3)-----打开视频文件
- Unity3D 效率优化
- Secure Boot功能介绍
- kafka入门:简介、使用场景、设计原理、主要配置及集群搭建
- Android----网络底层框架设计
- hive 2.0 的安装(客户端+服务端)
- OpenCV学习笔记(二)读取视频文件,双窗口显示与保存
- Nginx1.10 编译安装
- Kafka剖析(一):Kafka背景及架构介绍
- 同平台传输表空间实验
- sql 记录日周月点击
- 【CSS】样式继承
- SVN学习(三)-常用操作
- 扫描器的使用--Java基础019
- Android开发——相册拍照_04.图片上传