带进度条控制的视频读取与存储
来源:互联网 发布:日语学习软件 编辑:程序博客网 时间:2024/06/11 22:17
#include <iostream>#include <cv.h>#include <highgui.h>#include <cxcore.h>using namespace std;//初始化进度条位置int g_slider_position1=0;int g_slider_position2=0;CvCapture* g_capture1=NULL;CvCapture* g_capture2=NULL;//定义回调函数播放进度条的控制void onTrackbarSlider1(int pos1){ cvSetCaptureProperty(g_capture1,CV_CAP_PROP_POS_FRAMES,pos1);}void onTrackbarSlider2(int pos2){ cvSetCaptureProperty(g_capture2,CV_CAP_PROP_POS_FRAMES,pos2);}void main(){ cvNamedWindow("Video Test 1",CV_WINDOW_AUTOSIZE); cvNamedWindow("Video Test 2",CV_WINDOW_AUTOSIZE); char* filename1="Sample1.avi"; //要读取的视频名称 char* filename2="Sample2.avi"; //捕捉视频文件 g_capture1=cvCreateFileCapture(filename1); g_capture2=cvCreateFileCapture(filename2); //读取、显示视频文件的帧数 int frames1=(int)cvGetCaptureProperty(g_capture1,CV_CAP_PROP_FRAME_COUNT); cout<<"frame1="<<frames1<<endl; //建立进度条 if (frames1!=0) { cvCreateTrackbar("Position","Video Test 1",&g_slider_position1,frames1,onTrackbarSlider1); } int frames2=(int)cvGetCaptureProperty(g_capture2,CV_CAP_PROP_FRAME_COUNT); cout<<"frame2="<<frames2<<endl; if (frames2!=0) { cvCreateTrackbar("Position","Video Test 2",&g_slider_position2,frames2,onTrackbarSlider2); } //读取视频文件信息 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),(int)cvGetCaptureProperty(g_capture1,CV_CAP_PROP_FRAME_HEIGHT)); CvSize size2=cvSize((int)cvGetCaptureProperty(g_capture2,CV_CAP_PROP_FRAME_WIDTH),(int)cvGetCaptureProperty(g_capture2,CV_CAP_PROP_FRAME_HEIGHT)); //创建VideoWriter char *savefile1="save1.avi"; char *savefile2="save2.avi"; CvVideoWriter* wrVideo1=cvCreateVideoWriter(savefile1,CV_FOURCC('M','J','P','G'),fps1,size1); CvVideoWriter* wrVideo2=cvCreateVideoWriter(savefile2,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(37); if (c==27) { break; } } //释放内存,关闭窗口 cvReleaseCapture(&g_capture1); cvReleaseCapture(&g_capture2); // cvReleaseVideoWriter(&wrVideo1); // cvReleaseVideoWriter(&wrVideo2); cvDestroyWindow("Video Test 1"); cvDestroyWindow("Video Test 2");}
0 0
- 带进度条控制的视频读取与存储
- QML带进度条的视频播放功能
- qml播放带进度条的视频
- opencv之视频读取与文件存储
- 带进度条上传多视频
- Android自定义视频录制时的带进度条的按钮
- opencv中视频数据类型及视频帧的读取与存储
- 视频播放读取进度条MPMoviePlayerController
- 读取视频同时创建进度条
- android 视频播放控制 进度条
- [TFRecord格式数据]利用TFRecords存储与读取带标签的图片
- 带文字的进度条
- 带进度条的WebView
- 带进度条的webview
- 带进度条的JFrame
- 带进度条的WebView
- 带进度条的webview
- 带进度条的WebView
- 数据库
- leetcode第14题——*Longest Common Prefix
- Android中BroadcastReceiver
- leetcode之Merge Sorted Array
- 对javascript匿名函数的理解(透彻版)
- 带进度条控制的视频读取与存储
- Flex进阶持续学习——性能优化
- 周易六十四卦——比卦
- RxJava 嵌套回调
- Java中getResourceAsStream的用法
- JAVASE学习笔记之集合
- 句法分析树标注集
- Apache Kafka 教程笔记
- Android之菜单总结