[OpenCV]视频的显示和保存

#include <iostream>
#include <cv.h>
//#include <cvaux.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* g_capture2 = NULL;

// 定义回调函数用于播放进度的控制 
void onTrackbarSlide1( int pos1 )
{
	cvSetCaptureProperty( g_capture1, CV_CAP_PROP_POS_FRAMES, pos1 );
}
void onTrackbarSlide2( int pos2 )
{
	cvSetCaptureProperty( g_capture2, CV_CAP_PROP_POS_FRAMES, pos2 );
}


int main(int argc, char** argv )
{
	// 建立播放窗口
	cvNamedWindow( "Video Test 1", CV_WINDOW_AUTOSIZE );
	cvNamedWindow( "Video Test 2", CV_WINDOW_AUTOSIZE );

	// 捕捉视频文件
	char video1[] = "C:\\TestImages\\MovingCar.avi";
	char video2[] = "C:\\TestImages\\MovingCar2.avi";
	g_capture1 = cvCreateFileCapture( video1 );
	g_capture2 = cvCreateFileCapture( video2 );

	// 读取、显示视频文件的帧数
	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 = cvGetCaptureProperty( g_capture1, CV_CAP_PROP_FPS );
	double fps2 = cvGetCaptureProperty( g_capture2, CV_CAP_PROP_FPS );
	cout << "fps1 = " << fps1 << endl;
	cout << "fps1 = " << fps2 << endl;
	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 out1[] = "C:\\TestImages\\out1.avi";
	char out2[] = "C:\\TestImages\\out2.avi";
	//CvVideoWriter* wrVideo1 = cvCreateVideoWriter(out1, CV_FOURCC('M','J','P','G'), fps1, size1);
	//CvVideoWriter* wrVideo2 = cvCreateVideoWriter(out2, CV_FOURCC('M','J','P','G'), fps2, size2);
	CvVideoWriter* wrVideo1 = cvCreateVideoWriter(out1, CV_FOURCC('X','V','I','D'), fps1, size1);
	CvVideoWriter* wrVideo2 = cvCreateVideoWriter(out2, CV_FOURCC('X','V','I','D'), fps2, size2);

	int frs = 0;

	// 开始播放并保存视频
	IplImage* frame1;
	IplImage* frame2;
	IplImage* gray1 = cvCreateImage(size1, 8, 1);
	IplImage* gray2 = cvCreateImage(size2, 8, 1);

	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 );

		// 保存:将当前帧写入到目标视频文件
		cvCvtColor(frame1 ,gray1, CV_RGB2GRAY);
		cvCvtColor(frame2 ,gray2, CV_RGB2GRAY);
		cvWriteFrame( wrVideo1, gray1 );
		cvWriteFrame( wrVideo2, gray2 );

		// 若按下 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;
}

转载于:https://my.oschina.net/heartfly/blog/5464

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值